awk面试题

一级标题

awk面试题
1、文件datafile内容如下:

Mike Harrington:[510] 548-1278:250💯175
Christian Dobbins:[408] 538-2358:155:90:201
Suan Dalsass:[206] 654-6279:250:60:50
Archie McNichol:[206] 548-1348:250💯175
Jody Savage:[206] 548-1278:15:188:150
Guy Quigley:[916] 343-6410:250💯175
Dan Saveage:[406] 298-7744:450:300:275
Nancy McNeil:[206] 548-1278:250:80:75
John Goldenrod:[916] 348-4278:250💯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 '/[1]/'

6)显示所有只有四个字符的名?

答:awk -F ":" '{print $1}' datafile.txt | awk '{if(length($1)==4)print $1}'

7)显示所有区号为916的人名?

答:awk -F ":" '/916/{print $1}' datafile.txt

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}

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

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 '[2] ' 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统计当前主机的并发访问量?

答: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"

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?

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


  1. CE ↩︎

  2. [:sapce:] ↩︎

posted @ 2020-06-07 16:42  饕鬄。。  阅读(578)  评论(0)    收藏  举报