16.文字處理之awk--案例分析
阿新 • • 發佈:2020-11-06
1.檔案host_list.log 如下格式,請提取”.magedu.com”前面的主機名部分並寫入到回到該檔案中。
1 www.magedu.com
2 blog.magedu.com
3 study.magedu.com
4 linux.magedu.com
5 python.magedu.com
......
999 study.magedu.com
[root@localhost /data]#cat host_list.log 1 www.magedu.com 2 blog.magedu.com 3 study.magedu.com 4 linux.magedu.com 5 python.magedu.com ...... 999 study.magedu.com [root@localhost /data]#awk -F'[ .]' '{print $2}' host_list.log >> host_list.log [root@localhost /data]#cat host_list.log 1 www.magedu.com 2 blog.magedu.com 3 study.magedu.com 4 linux.magedu.com 5 python.magedu.com ...... 999 study.magedu.com www blog study linux python study
2.統計/etc/fstab檔案中每個檔案系統型別出現的次數。
[root@localhost /data]#awk -F'[[:space:]]+' '/^UUID/{print $3}' /etc/fstab |uniq -c 3 xfs 1 swap [root@localhost /data]#cat /etc/fstab # # /etc/fstab # Created by anaconda on Mon Aug 3 17:02:43 2020 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # UUID=71b66acd-688f-45df-8d45-1d3cf606820f / xfs defaults 0 0 UUID=1890737d-134e-49aa-a764-569a2bd251d8 /boot xfs defaults 0 0 UUID=82c012a2-3f30-4649-ac90-e9896c20f829 /data xfs defaults 0 0 UUID=87716ee2-fda6-41e2-9d46-4d42bd7bb257 swap swap defaults 0 0
3.統計/etc/fstab檔案中每個單詞出現的次數。
[root@localhost /data]#cat /etc/fstab # # /etc/fstab # Created by anaconda on Mon Aug 3 17:02:43 2020 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # UUID=71b66acd-688f-45df-8d45-1d3cf606820f / xfs defaults 0 0 UUID=1890737d-134e-49aa-a764-569a2bd251d8 /boot xfs defaults 0 0 UUID=82c012a2-3f30-4649-ac90-e9896c20f829 /data xfs defaults 0 0 UUID=87716ee2-fda6-41e2-9d46-4d42bd7bb257 swap swap defaults 0 0 [root@localhost /data]#awk '{for(i=1;i<=NF;i++)word[$i]++}END{for (a in word) print a,word[a]}' /etc/fstab man 1 2020 1 and/or 1 maintained 1 xfs 3 Accessible 1 # 7 are 1 UUID=71b66acd-688f-45df-8d45-1d3cf606820f 1 defaults 4 blkid(8) 1 / 1 0 8 See 1 3 1 Mon 1 Created 1 on 1 mount(8) 1 anaconda 1 fstab(5), 1 UUID=82c012a2-3f30-4649-ac90-e9896c20f829 1 /boot 1 findfs(8), 1 '/dev/disk' 1 by 2 /etc/fstab 1 pages 1 more 1 /data 1 UUID=87716ee2-fda6-41e2-9d46-4d42bd7bb257 1 info 1 UUID=1890737d-134e-49aa-a764-569a2bd251d8 1 Aug 1 swap 2 17:02:43 1 filesystems, 1 reference, 1 for 1 under 1
4.提取出字串Yd$C@M05MB%9&Bdh7dq+YVixp3vpw中的所有數字。
[root@localhost /data]#echo "Yd$C@M05MB%9&Bdh7dq+YVixp3vpw" | awk '{gsub(/[^0-9]/,"");print $0}'
05973
5.有一檔案記錄了1-100000之間隨機的整數共5000個,儲存的格式100,50,35,89…請取出其中最大和最小的整數。
[root@localhost /data]#for i in {1..5000};do echo -n $((($RANDOM+90000)%100000)),>>random.txt;done
[root@localhost /data]#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}' random.txt
最大值:99999 最小值:1
6.解決Dos攻擊生產案例:根據web日誌或者或者網路連線數,監控當某個IP併發連線數或者短時內PV達到100,即呼叫防火牆命令封掉對應的IP,監控頻率每隔5分鐘。防火牆命令為:iptables -A INPUT -s IP -j REJECT
[root@localhost /data]#ss -nt | awk -F " +|:" '{ip[$4]++}END{for(i in ip){if(ip[i]>100){system("iptables -A INPUT -s "i" -j REJECT")}}}'
7.將以下檔案內容中FQDN取出並根據其進行計數從高到低排序
http://mail.magedu.com/index.html
http://www.magedu.com/test.html
http://study.magedu.com/index.html
http://blog.magedu.com/index.html
http://www.magedu.com/images/logo.jpg
http://blog.magedu.com/20080102.html
http://www.magedu.com/images/magedu.jpg
[root@localhost /data]#awk -F"/" '{url[$3]++}END{for(i in url){print url[i],i}}' http.log |sort -nr
3 www.magedu.com
2 blog.magedu.com
1 study.magedu.com
1 mail.magedu.com
[root@localhost /data]#cat http.log
http://mail.magedu.com/index.html
http://www.magedu.com/test.html
http://study.magedu.com/index.html
http://blog.magedu.com/index.html
http://www.magedu.com/images/logo.jpg
http://blog.magedu.com/20080102.html
http://www.magedu.com/images/magedu.jpg
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|