天天看點

awk執行個體(持續更新)

1、顯示第幾列到第幾列

顯示第3至第5列

awk '{for(i=3;i<=5;i++) printf $i""FS;print ""}' file

顯示第3列至最後一列

awk '{for(i=3;i<=NF;i++) printf $i""FS;print ""}' file

擴充:

find . -mtime 0 -name "*.php" -exec ls -lih {} \; |awk '{print $6,$7,$8,$9}'

find . -mtime 0 -name "*.php" -exec ls -lih {} \; |awk '{for(i=6;i<=9;i++) printf $i""FS;print ""}'

find . -mtime 0 -name "*.php" -exec ls -lih {} \; |awk '{for(i=6;i<=NF;i++) printf $i""FS;print ""}'

2、統計tcp連接配接狀态和數量

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

3、統計apache日志IP通路次數

cat mail_access_log-20180106 | awk '{a[$1]++}END{for (i in a){print i,a[i]}}' | sort -nr -k 2 |head -10

192.168.200.105 24454

192.168.0.224 21956

4、統計某郵件系統smtp外發日志,每個賬号外發了多少封日志

cat smtp.log | grep "from:" | awk '{a[$6]++}END{for(i in a){print i,a[i]}}' |sed 's/<//g' | sed 's/>,//g' | sort -rn -k 2 | head -n 10

不用數組的方法:cat smtp.log | grep "from:" | awk -F " " '{ print $6 }' | sed 's/<//g' | sed 's/>,//g' | sort | uniq -c | sort -rn -k 1 | head -n 10

5、隻替換指定列的比對字元(第4列和第五列)

awk ' {if($4==-1){$4="不限制"}if($4==1){$4="禁止"}if($4==2){$4="本域"}if($4==3){$4="指定外域"}if($4==4){$4="本地所有域"}if($5==-1){$5="不限制"}if($5==1){$5="禁止"}if($5==2){$5="本域"}if($5==3){$5="指定外域"}if($5==4){$5="本地所有域"}print}' /root/user.txt  | column -t 

備注:column -t表示格式化列。

本文轉自 sailikung 51CTO部落格,原文連結:http://blog.51cto.com/net881004/2053961,如需轉載請自行聯系原作者