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 24454192.168.0.224 219564、统计某邮件系统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表示格式化列。
6、查找指定IP地址,恶意试密码的问题
2018-04-24 06:38:25 Authenticator[INFO]: [50069] smtp passdb 117.82.240.130 lizhou@test.com cost: 1.021
2018-04-24 06:39:04 Authenticator[INFO]: [50069] pop3 passdb 220.181.15.87 dengbing@test cost: 1.538grep 'nonexistence-blocked' /usr/local/kk-mail/log/app/authenticator.log | awk -v OFS="\t" '{++a[$9]}END{for ( i in a ) print i,a[i]}' | sed -r 's/\{//' | sed -r 's/\}//' | sort -n -k2
112.248.22.62 3573
112.192.140.14 3652113.121.241.9 38227、统计tcp连接ip和访问次数
netstat -n | awk '/^tcp/ {print $5}' | awk -F: '{print $1}' | sed '/^$/d' |sort | uniq -c | sort -rn | head -n 10
netstat -n | awk '/^tcp/ {print $5}' |awk -F":" '{print $1}' | sed '/^$/d' |awk '{++a[$1]}END{for(i in a){print i,a[i]}}' | sort -nr -k 2 | head -n 10
8、先按照关键字筛选,然后取id列兵排序去重,然后根据这个id再查日志文件
for i in `cat test.log| grep delete|awk '{print $4}'|awk -F "[" '{print $2}'|awk -F "-" '{print $1}'|sort|uniq`; do grep $i test.log; done >20180604.txt