Linux 练习 - 文本处理三剑客之AWK

1、文件 ip_list.txt 如下格式,请提取 ”.solin.com” 前面的主机名部分并写入到回到该文件中

1 blog.solin.com

2 www.solin.com

999 study.solin.com

[root@centos7 ~]# awk -F "[ .]" '{print $2}' ip_list.txt >> ip_list.txt
2、统计 /etc/fstab 文件中每个文件系统类型出现的次数
[root@centos7 ~]# awk '/^UUID/{fs[$3]++}END{for(i in fs){print i,fs[i]}}' /etc/fstab
swap 1
xfs 2
3、统计 /etc/fstab 文件中每个单词出现的次数
[root@centos7 ~]# awk -F "[)( /=',-]" '{for(i=1;i<=NF;i++){if($i ~ "\\<[[:alpha:]]+\\>"){word[$i]++}}}END{for(i in word){print word[i],i}}' /etc/fstab  | sort -nr[root@centos7 ~]# awk -F "[)( /=',-]" '{for(i=1;i<=NF;i++){if($i ~ "\\y[[:alpha:]]+\\y"){word[$i]++}}}END{for(i in word){print word[i],i}}' /etc/fstab  | sort -nr
4、提取出字符串 Yd$C@M05MB%9&Bdh7dq+YVixp3vpw 中的所有数字
[root@centos7 ~]# echo "Yd$C@M05MB%9&Bdh7dq+YVixp3vpw" | awk '{gsub(/[^0-9]/,"",$0);print $0}'
05973
5、有一文件记录了 1-100000 之间随机的整数共 5000 个,存储的格式 100,50,35,89… 请取出其中最大和最小的整数
[root@centos7 ~]# for(( i=1;i<=5000;i++ ));do echo $[$RANDOM*RANDOM%100000] ;done > numbers.txt
[root@centos7 ~]# awk -F, '{max=$1;min=$1;for(i=1;i<NF;i++){if($i>max){max=$i}else{if($i<min){min=$i}}}}END{print "最大值:"max,"最小值:"min}' numbers.txt 
最大值:99966 最小值:16
6、解决 DOS 攻击生产案例:根据 web 日志或者或者网络连接数,监控当某个 IP 并发连接数或者短时内 PV 达到 100,即调用防火墙命令封掉对应的 IP,监控频率每隔 5 分钟。防火墙命令为:iptables -A INPUT -s IP -j REJECT
  • 脚本
#!/bin/bash
ss -nt | awk -F " +|:" '{ip[$4]++}END{for(i in ip){if(ip[i]>100){system("iptables -A INPUT -s "i" -j REJECT")}}}'
  • 任务计划
# 授权
[root@centos7 ~]#  chmod+x /root/dos.sh

# 设置
[root@centos7 ~]# crontab
*/5 * * * * /bin/bash /root/dos.sh

# 查看
[root@centos7 ~]# crontab -l
*/10 * * * * /bin/bash /root/dos.sh
7、将以下文件内容中FQDN取出并根据其进行计数从高到低排序

http://mail.solin.com/index.html

http://www.solin.com/test.html

http://study.solin.com/index.html

http://blog.solin.com/index.html

http://www.solin.com/images/logo.jpg

http://blog.solin.com/20080102.html

[root@centos7 ~]# cat fqdn.txt 
http://mail.solin.com/index.html
http://www.solin.com/test.html
http://study.solin.com/index.html
http://blog.solin.com/index.html
http://www.solin.com/images/logo.jpg
http://blog.solin.com/20080102.html
[root@centos7 ~]# awk -F"[/.]" '{fqdn[$3]++}END{for(i in fqdn){print fqdn[i],i}}' fqdn.txt | sort -rn
2 www
2 blog
1 study
1 mail
8、将以下文本以 inode 为标记,对 inode 相同的 counts 进行累加,并且统计出同一 inode 中,beginnumber 的最小值和 endnumber 的最大值

inode|beginnumber|endnumber|counts|

106|3363120000|3363129999|10000|

106|3368560000|3368579999|20000|

310|3337000000|3337000100|101|

310|3342950000|3342959999|10000|

310|3362120960|3362120961|2|

311|3313460102|3313469999|9898|

311|3313470000|3313499999|30000|

311|3362120962|3362120963|2|

输出的结果格式为:

310|3337000000|3362120961|10103|

311|3313460102|3362120963|39900|

106|3363120000|3368579999|30000|

[root@centos7 ~]# cat inode.txt
inode|beginnumber|endnumber|counts|
106|3363120000|3363129999|10000|
106|3368560000|3368579999|20000|
310|3337000000|3337000100|101|
310|3342950000|3342959999|10000|
310|3362120960|3362120961|2|
311|3313460102|3313469999|9898|
311|3313470000|3313499999|30000|
311|3362120962|3362120963|2|
[root@centos7 ~]# awk -F"|" -v OFS="|" 'NR!=1{count[$1]+=$4; \
> if(min[$1]>$2 || !min[$1]){min[$1]=$2};if(max[$1]<$3 || !max[$1]){max[$1]=$3}} \
> END{for(i in count){print i,min[i],max[i],count[i]"|"}}' inode.txt
310|3337000000|3362120961|10103|
311|3313460102|3362120963|39900|
106|3363120000|3368579999|30000|

热门文章

暂无图片
编程学习 ·

Redis和Memcache缓存核心及原理对比最全解析

1. 缓存基础知识1.1 缓存类型 缓存是高并发场景下提高热点数据访问性能的一个有效手段,在开发项目时会经常使用到。缓存的类型分为:本地缓存、分布式缓存和多级缓存。 本地缓存就是在进程的内存中进行缓存,比如我们的 JVM 堆中,可以用 LRUMap 来实现,也可以使用 Ehcache 这…
暂无图片
编程学习 ·

毛毛爸爸手记-2

http://blog.sina.com.cn/s/blog_4bf99d0601000825.html今天,毛爸从天鹅和鸭子的故事说起。从前......一只美丽的天鹅有一天落在地上时,看见了一只健壮的鸭子,她立刻被这只帅气的鸭子所打动,她惊诧于鸭子不同于她同类的模样,不同于她同类气质,是那么的有型,那么的另类。…
暂无图片
编程学习 ·

工科中的设计思维

超星学习通app工科中的设计思维网课答案,工科中的设计思维尔章节测验网课答案1.1 走近设计思维1【单选题】本门课程讲述的主要内容不包括()。A、设计思维这一学习形式和思维方式B、一系列有用的创新工具和创造技法C、工科学生需要用到的专业设计软件D、系统化的设计流程和与众…
暂无图片
编程学习 ·

JVM——Java的内存回收

Java引用的种类对于JVM的垃圾回收机制来说,如果一个对象,没有一个引用指向它,那么它就被认为是一个垃圾。那该对象就会回收。可以把JVM内存中对象引用理解成一种有向图,把引用变量、对象都当成有向图的顶点,将引用关系当成图的有向边(注意:有向边总是从引用变量指向被引…
暂无图片
编程学习 ·

车载TBOX标准-用于和后台系统/手机APP通信,实现手机APP车辆控制

基于新能源汽车控制数据智能终端T-BOX对于共享汽车(汽车分时租赁)场景中司机通过手机APP实现预订车辆、查找车辆、无线开门、启动车辆、还车等操作。 手机APP、云端平台与车辆实现信息互通。 T-Box作为车辆与云端平台实现互通的关键设备,不仅能把采集到的车辆数据(如新能源汽车…
暂无图片
编程学习 ·

综合练习

一、端午节的淘宝粽子交易 import pandas as pd import numpy as npdf1 = pd.read_csv(zongzi.csv) df1.head()标题价格付款人数店铺发货地址0五芳斋粽子礼盒 心悦+18只装咸鸭蛋组合端午节礼品团购嘉兴肉粽子1296人付款五芳斋官方旗舰店浙江 嘉兴1北京稻香村端午粽子手工豆沙粽…
暂无图片
编程学习 ·

直播带货平台开发公司哪家强?

直播带货正在我们的生活中大放异彩,直播带货的用户却日益增多,甚至成为了一种刚需,未来的发展必然一片光明,在各大商场店铺实时播放,与实体店销售员一样承担着重要的角色,它战胜了传统的广告,正昂首阔步向我们走来。直播的背后,也凸显出社会的进步与电子商务格局的变化…
暂无图片
编程学习 ·

Video Summarization with Long Short-Term Memory论文翻译

基于长短期记忆网络的视频摘要 文章目录基于长短期记忆网络的视频摘要Abstract1 introduction2 Related Work3 Approach3.1 Problem Statement3.2 Long Short-Term Memory (LSTM)3.3 vsLSTM for Video Summarization3.4 Enhancing vsLSTM by Modeling Pairwise Repulsiveness3…
暂无图片
编程学习 ·

Java工具类-使用RSA验签

1 私钥签名public static String signByKey(String content,String privateKey) {PKCS8EncodedKeySpec sp = new PKCS8EncodedKeySpec(new BASE64Decoder().decodeBuffer(privateKey));KeyFactory keyFactory = KeyFactory.getInstance("RSA");PrivateKey key = keyF…
暂无图片
编程学习 ·

App测试中IOS和安卓测试的区别

一、分辨率的测试 安卓端有20多种,IOS相对就比较少一些 二、操作系统的版本 安卓的操作系统比较多,IOS比较少,而且它只能支持单项升级,不能支持降级。 三、操作习惯的一些不同 安卓习惯点击BACK键,所以我们要测试一下BACK键,看看BACK键是否被重写了。点击BACK键之后,看看…
暂无图片
编程学习 ·

C++字符串的输入和用getline输入遇到的问题

C++中的字符串读入我们通常是用 cin>>str; 它只要碰到空格或者换行符就意味着本字符串读取结束,且不会读取空格和换行符(相当于丢掉)。 而getline函数读取一行,可以读入空格,遇到换行符结束(从输入流中丢掉该换行符)。但是,注意一点就是:如果只读入了一个换行符…
暂无图片
编程学习 ·

哈夫曼编码

哈夫曼编码 输入一个字符串文本 #include <stdio.h> #include <stdlib.h> #include <string.h>#define cmax 0x3f3f3f3f // 宏定义一个较大的数,作为比较数据 #define cmaxsize 10000 // 宏定义数组的长度 // ---构建哈夫曼树 // ---定义哈夫曼…
暂无图片
编程学习 ·

opencv画圆与棋盘图

画出的效果如下:代码 import os import cv2 import numpy as npboard_pixel_width=200 ncols=9 nrows=6if __name__=="__main__":image_width=(ncols+1)*board_pixel_widthimage_height=(nrows+1)*board_pixel_widthres=np.zeros((image_height,image_width,1),np.u…
暂无图片
编程学习 ·

数据库---常用数据库的驱动程序

Oracle数据库 驱动程序包名:ojdbc6.jar 驱动类的名字:oracle.jdbc.driver.OracleDriverJDBC URL:jdbc:oracle:thin: @dpip:port: databasename 说明:驱动程序包名有可能会变 JDBC URL中各个部分含义如下: dbip –为数据库服务器的IP地址,如果是本地可写:localhost或127.…
暂无图片
编程学习 ·

数据库原理及应用教程陈志泊-第三章课后习题

一、选择题1. B 2. A 3. C 4. B 5. C 6. C7. B 8. D 9. A 10. D 11. C 12. D二、填空题1. 结构化查询语言2. 数据查询、数据定义、数据操纵、数据控制3. 外模式、模式、内模式4. 数据库、事务日志5. NULL/NOT NULL 、 UNIQUE 约束、 PRIMARY KEY 约束、 FOREIGN KEY …
暂无图片
编程学习 ·

导入spring源码到idea的完整步骤

导入spring源码到idea的完整步骤1.到github上找到spring-framework代码,然后将代码fork到码云上,步骤地址如下: https://cloud.tencent.com/developer/article/1589675 2.下载gradle,安装gradle(注意idea和gradle对应的版本,楼主使用的是2019.2版本的idea和5.2.1版本的gr…
暂无图片
编程学习 ·

redis 集群

看问题:容量不够,redis如何进行扩容? 并发写操作, redis如何分摊? 另外,主从模式,薪火相传模式,主机宕机,导致ip地址发生变化,应用程序中配置需要修改对应的主机地址、端口等信息。之前通过代理主机来解决,但是redis3.0中提供了解决方案。就是无中心化集群配置。什么…