第17章 awk 1、⽂件datafile内容如下: Mike Harrington:[510] 548-1278:250:100:175 Christian Dobbins:[408] 538-2358:155:90:201 Suan Dalsass:[206] 654-6279:250:60:50 Archie McNichol:[206] 548-1348:250:100:175 Jody Savage:[206] 548-1278:15:188:150 Guy Quigley:[916] 343-6410:250:100:175 Dan Saveage:[406] 298-7744:450:300:275 Nancy McNeil:[206] 548-1278:250:80:75 John Goldenrod:[916] 348-4278:250:100:175 Chet Main:[510] 548-5258:50:95:135 Tom Savage:[408] 926-3456:250:168:200 Elizabeth Stachelin:[916] 440-1763:175:75:300 上面的数据表中包含名字、电话号码和过去三个月里的捐款,下面分别用awk解答: 1)显示所有电话号码? 答:awk -F ":" '{print $2}' datafile.txt 2)显示Dan的电话号码? 答:awk -F ":" '/^Dan/{print $2}' datafile.txt 3)显示Suan的捐款和电话? 答:awk -F ":" '/^Suan/{print $3,$4,$5,$2}' datafile.txt 4)显示所有以D开头的姓? 答:awk -F ":" '{print $1}' datafile.txt | awk '{print $2}'|awk '/^D/' 5)显示所有以一个C或E开头的名? 答:awk -F ":" '{print $1}' datafile.txt | awk '{print $1}'|awk '/^[CE]/' 6)显示所有只有四个字符的名? 答:awk -F ":" '{print $1}' datafile.txt | awk '{if(length($1)==4)print $1}' 7)显示所有区号为916的人名? 答:awk -F ":" '/916/{print $1}' datafile.txt 2019/4/13 第17章 awk 面试题(参考答案).md file:///C:/Users/chen/Desktop/练习题2.0/17文本处理三剑客之AWK/第17章 awk 面试题(参考答案).html 2/6 8)显示Mike的捐款,显示每个值时都有$开头,如$250$100$175? 答:awk -F ":" '/^Mike/{print "$"$3"$"$4"$"$5}' datafile.txt 9)显示姓,其后跟一个逗号和名,如Jody,Savage? 答:awk -F ":" '{print $1}' datafile.txt | awk '{print $2,",",$1}' 10)写一个awk的脚本,作用: (1)显示Savage的全名和电话号码 (2)显示Cher的捐款 (3)显示所有头一个月捐款$250的人名 答:vim awk #!/bin/awk -f BEGIN{FS=":"} {if($1 ~/Savage/) print $1":"$2} {if($1~/^Chet/) print "$"$3":""$"$4":""$"$5} {if($3==250) print $1} awk -f awk datafile.txt 2、⽂件名AccQryFree2016.log,存在⽬录/root/boss/log/下,内容: <80:21308> 12:00:00 service start query_value,exited with value 0; <80:21308> 12:00:01 select * from crm_user where sts=1;exited with value 0; <80:21308> 12:10:01 use db:db_ngboss[srv_zw1] <80:21309> 12:20:00 service start query_value,exited with value 0; <80:21309> 12:22:01 select * from crm_user where sts=1;exited with value 0; <80:21309> 12:23:01 use db:db_ngboss[srv_zw1] 1)统计出文件中字符串exited with value 0出现的次数? 答:grep -o "exited with value 0" AccQryFree2016.log|uniq -c 2)使用vi编辑器,将文件中exited with value 0替换为EXITED WITH VALUE 0? 答:vim /root/boss/log/AccQryFree2016.log :%s/exited with value 0/EXITED WITH VALUE 0/g 3)写出带有exited with value 0的时间列全部输出? 答:grep "exited with value 0" AccQryFree2016.log|awk -F " " ' {print $2}' 4)把该文件压缩? 答:tar jcvf AccQryFree2016.log.tar.bz2 /root/boss/log/AccQryFree2016.log 2019/4/13 第17章 awk 面试题(参考答案).md file:///C:/Users/chen/Desktop/练习题2.0/17文本处理三剑客之AWK/第17章 awk 面试题(参考答案).html 3/6 5)配置一个定时任务,将该文件在每周五下午6点进行删除? 答:crontab -e 0 18 * * 5 rm -rf /root/boss/log/AccQryFree2016.log 3、使⽤netstat和awk统计服务器出现tcp⽹络状态并按数量排序? netstat -tan |grep "^tcp\b" |awk '{print $5}' |sort | uniq -c| sort -nr 4、ll | awk '{print $3, "owns",$9}'这条命令在做什么? 显示当前目录下,文件或目录的拥有者,打印owns,目录名称。 5、实现查询⽂件file1⾥⾯空格开始的所在的⾏号? 答:grep -n -E '^[[:sapce:]] ' file1|awk -F: '{print $1}' 6、linux系统中,(awk)命令可以从⽂本⽂件的每⼀⾏中截取指定的内 容的数据。 7、使⽤awk命令,计算⼀个⽬录下⽂件⼤⼩的总和? 答:ll |awk 'BEGIN{sum=0}{sum=sum+$5}END{print sum}' 8、⼀个⽂件有a、b、c三列,使⽤什么命令取出其中第三列,并排序? 答:awk '{print $3}' 文件|sort 9、使⽤awk统计当前主机的并发访问量? 2019/4/13 第17章 awk 面试题(参考答案).md file:///C:/Users/chen/Desktop/练习题2.0/17文本处理三剑客之AWK/第17章 awk 面试题(参考答案).html 4/6 答:netstat -tan | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}' 显示结果: LAST_ACK 1 SYN_RECV 14 ESTABLISHED 79 FIN_WAIT1 28 FIN_WAIT2 3 CLOSING 5 TIME_WAIT 1669 解释: CLOSED:无连接是活动的或正在进行 LISTEN:服务器在等待进入呼叫 SYN_RECV:一个连接请求已经到达,等待确认 SYN_SENT:应用已经开始,打开一个连接 ESTABLISHED:正常数据传输状态 FIN_WAIT1:应用说它已经完成 FIN_WAIT2:另一边已同意释放 ITMED_WAIT:等待所有分组死掉 CLOSING:两边同时尝试关闭 TIME_WAIT:另一边已初始化一个释放 LAST_ACK:等待所有分组死掉 10、统计apache访问⽇志流量排名前10个ip? 答: cat access_log | awk ’{print $1}’ | sort | uniq -c | sort -n -r | head -10 解法2: awk ‘{a[$1] += 1;} END {for (i in a) printf(“%d %s\n”, a[i], i);}’ 日志文 件 | sort -n | tail 11、使⽤netstat -an输出格式,请编写脚本,统计输出连接到本地主机 数最多的10个ip,并按连接数从多到少排序? tcp 0 52 172.18.118.155:22 172.18.116.232:49916 ESTABLISHED 答:#!/bin/sh top10ip=ss -nt | grep 'ESTAB' | awk '{print $5}' | cut -d: -f1 | grep "^[[:digit:]]\+.*" | sort | uniq -c | sort -rnk1 | awk '{print $2,"\t",$1}' | head echo "连接到本地主机最多的10个ip是:$top10ip" 2019/4/13 第17章 awk 面试题(参考答案).md file:///C:/Users/chen/Desktop/练习题2.0/17文本处理三剑客之AWK/第17章 awk 面试题(参考答案).html 5/6 12、nginx的access.log⽇志如下,⽤shell实现,将状态码为200的请求 的ip访问排名前10个列出来: 172.18.116.232 - - [18/May/2018:00:20:29 -0400] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.117 Safari/537.36" "-" 172.18.116.232 - - [18/May/2018:00:20:29 -0400] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.117 Safari/537.36" "-" 答:awk '($9 ~ /200/)' access.log | awk '{print $9,$7}' | sort -nr |head -n10 13、处理以下⽂件内容,将域名取出并计数排序: http://www.baidu.com/index.html http://www.baidu.com/1.html http://post.baidu.com/index.html http://mp3.baidu.com/index.html http://www.baidu.com/3.html http://post.baidu.com/2.html 得到如下结果: 域名出现的次数 域名 3 www.baidu.com 2 post.baidu.com 1 MP3.baidu.com 如何取出? 答:awk -F “/” ‘{print $3}’|sort|uniq -c|sort -nr 14、统计apaceh的access.log中访问量最多的5个ip? 2019/4/13 第17章 awk 面试题(参考答案).md file:///C:/Users/chen/Desktop/练习题2.0/17文本处理三剑客之AWK/第17章 awk 面试题(参考答案).html 6/6 172.18.116.232 - - [21/May/2018:05:29:11 -0400] "GET /favicon.ico HTTP/1.1" 404 209 "http://172.18.118.155:8080/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.117 Safari/537.36" 答: cat access_log | awk ’{print $1}’ | sort | uniq -c | sort -nr | head -5