awk 面試題

第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<br/>-10
解法2: awk ‘{a[$1] += 1;} END {for (i in a) printf(“%d %s\n”, a[i], i);}’ 日誌文<br/>件 | 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<br/>"^[[:digit:]]\+.*" | sort | uniq -c | sort -rnk1 | awk '{print $2,"\t",$1}' |<br/>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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章