awk練習(xí)題

1 、統(tǒng)計/etc/fstab 文件中每個文件系統(tǒng)類型出現(xiàn)的次數(shù)

[root@centos7 ~]# awk '/^UUID*/{filetype[$3]++}END{for
(i in filetype){print i,filetype[i]}}' /etc/fstab

 swap 1
 xfs 3 


2 、統(tǒng)計/etc/fstab 文件中每個單詞出現(xiàn)的次數(shù)

 awk '{for(i=0;i<=NF;i++){count[$i]++}}END{for(i in count)
  {print i,count[i]}}' /etc/fstab

   man 1
   May 1
   and/or 1 
   maintained 1 
   xfs 3 


3 、提取出字符串Yd$C@M05MB%9&Bdh7dq+YVixp3vpw中的所有數(shù)字

echo "Yd$C@M05MB%9&Bdh7dq+YVixp3vpw"|awk -F "[^[:digit:]]"
 '{for(k=1;k<=NF;k++){count[$k]}}END{for(i in count){printf
 "%s",i}printf   "\n"}'

  79053


4 、解決DOS 攻擊生產(chǎn)案例:根據(jù)web 日志或者或者網(wǎng)絡(luò)連接數(shù),監(jiān)控當(dāng)某個IP 并發(fā)連接數(shù)或者短時內(nèi)PV 達到100 ,即調(diào)用防火墻命令封掉對應(yīng)的IP ,監(jiān)控頻率每隔5 分鐘。防火墻命令為:iptables -A INPUT -s IP -j REJECT

[root@shell scripts]# vidos.sh
#!/bin/bash
log=/tmp/tmp.log
[ -f $log ] || touch $log
function add_iptables()
{while read line
do
    ip=`echo $line|awk '{print $2}'`
    count=`echo $line|awk '{print $1}'`
  if [ $count -gt 100 ] && [ `iptables -L -n|grep "$ip"|
      wc -l`-lt 100 ]
  then
     iptables -I INPUT -s $ip -j DROP
      echo "$line is dropped">>/tmp/droplist.log
  fi
done <$log
}
function main()
{while true
  do
    netstat -an|grep EST|awk -F '[ :]+' '{print $6}'|sort|
    uniq -c >$log
    add_iptable
    ssleep 180
    done
}
main

5:統(tǒng)計netstat -tan 中各狀態(tài)的次數(shù)
每出現(xiàn)一被/^tcp/模式匹配到的行,數(shù)組S[$NF]就加1,NF為當(dāng)前匹配到的行的最后一個字段,此處用其值做為數(shù)組S的元素索引

netstat -tan|awk '/^tcp/{state[$NF]++}END{for(i in state)
{print i,state[i]}}'

   LISTEN 12 
   ESTABLISHED 1 


6:統(tǒng)計出/etc/passwd文件中shell的種類和個數(shù)

awk -F: '{shell[$NF]++}END{for (i in shell){print i ,
  shell[i]}}' /etc/passwd


 /bin/sync 1 
 /bin/bash 2 
 /sbin/nologin 39 
 /sbin/halt 1
 /sbin/shutdown 1 

重點解析一下這條命令: 首先,shell[$NF]++這個語句。其中的$NF所代表的是一個字符串,即shell的類型。也就是說在這個數(shù)組中的元素名稱是shell的名稱。而后面的++是對這個數(shù)組進行賦值。因在/etc/passwd 這個文件中的shell類型四種。也就是說這個數(shù)組就有四個元素,并且它的值是不斷被更新的。其次,語句for( i in shell)是設(shè)定了i是數(shù)組shell中的坐標(biāo)變量,即是i是元素的名稱,shell[i]是數(shù)組的值。

7:計算/etc/passwd中所有用戶的UID平均數(shù),以及GID平均數(shù).
輸出格式:
UID and GID AVG
UID-AVG : 1750.72
GID_AVG : 1754

[root@centos7 ~]# awk -F: '{U+=$3;G+=$4}END{print "U_avg:"
  U/NR"\nG_avg:"G/NR}' /etc/passwd

 U_avg:1779.89
 G_avg:1760.84 


8:使用:符號做分隔符,將字段逆序輸出/etc/passwd文件的每行

 awk -F: '{for(i=NF;i>1;i--)printf "%s:",$i;print $i}' 
   /etc/passwd

   /bin/bash:/root:root:0:0:x:root
   /sbin/nologin:/bin:bin:1:1:x:bin 
   /sbin/nologin:/sbin:daemon:2:2:x:daemon
   /sbin/nologin:/var/adm:adm:4:3:x:adm
   /sbin/nologin:/var/spool/lpd:lp:7:4:x:lp 


9:統(tǒng)計ps中VSZ,RSS各自總和

 ps aux|awk 'BEGIN{print "ps MEM statistic"}{V+=$5;R+=$6}
  END{print "VSZ_SUM: "V/1024"M\n""RSS_SUM:"R/1024"M"}'

 ps MEM statistic
 VSZ_SUM: 31116.6M
 RSS_SUM:678.012M 


10:根據(jù)uid值給用戶分等級 Admin system users輸出格式:

LEVEL NAME
Admin root
sysuser bin
users seke

[root@centos7 ~]# awk -F: 'BEGIN{print "LEVEL\t\tNAME"}
{if($3==0){a++;print"admin\t\t"$1"\n"}
 else if($3<500){s++;print "sysuser\t\t"$1"\n"}
 else{u++;print "user\t\t"$1"\n"}} END{print "admin:"a,
 "sysuser:"s,"user:"u}' /etc/passwd

    LEVEL   NAME
    admin       root
    sysuser    bin
    sysuser   daemon
    sysuser   admsys

`

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • awk介紹awk變量printf命令:實現(xiàn)格式化輸出操作符awk patternawk actionawk數(shù)組aw...
    哈嘍別樣閱讀 1,737評論 0 4
  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經(jīng)改了很多 但是錯誤還是無法避免 以后資料會慢慢更新 大...
    數(shù)據(jù)革命閱讀 13,203評論 2 33
  • Ubuntu的發(fā)音 Ubuntu,源于非洲祖魯人和科薩人的語言,發(fā)作 oo-boon-too 的音。了解發(fā)音是有意...
    螢火蟲de夢閱讀 100,608評論 9 468
  • 本章主要學(xué)習(xí)內(nèi)容awk介紹 ?awk基本用法 ?awk變量 ?awk格式化 ?awk操作符 ?awk條件判斷 ?a...
    楠人幫閱讀 1,369評論 0 8
  • '#Gun awk的相關(guān)用法 awk的工作原理 一次讀取一行文本,按輸入分隔符進行切片,切成多個組成部分,將每片直...
    魏鎮(zhèn)坪閱讀 39,947評論 2 37

友情鏈接更多精彩內(nèi)容