Linux 命令 之 awk

简介    

    awk是一个强大的文本分析工具,比grep的查找更加精确,原理是,awk把文件逐行的读入,以空格为默认分隔符,将每行的数据进行切片,对于切开的部分可以进行各种分析。

 

命令行使用方法

awk [-F field-separator] 'commands' input-file

 

awk使用实战

(1)通过默认分隔符,空格 或者 tab,进行每行的切分获取最近登录的5个用户的信息

[saas@dev-01 ~]$ last -n 5
saas     pts/7        192.0.0.3   Wed Dec 20 01:10   still logged in   
saas     pts/7        192.0.0.3   Wed Dec 20 00:09 - 00:42  (00:33)    
saas     pts/7        192.0.0.3    Tue Dec 19 19:10 - 19:22  (00:12)    
saas     pts/7        192.0.0.3    Mon Dec 18 18:20 - 21:55  (03:35)    
saas     pts/7        192.0.0.3    Fri Dec 15 18:50 - 19:26  (00:36)    

通过awk过滤出最近登录的 5个账号 和 ip

[saas@dev-01 ~]$ last -n 5 | awk '{print $1" "$3}'

saas 116.243.29.113

saas 116.223.29.116

saas 123.51.21.21

saas 192.0.0.3

saas 203.16.27.302

(2)指定不同的分隔符进行每行的切分

cat /etc/passwd | awk -F ':' '{print $1 " " $ 2}'
cat /etc/passwd | awk -F '_' '{print $1 " " $ 2}'

(3)我们甚至可以给筛选出的结果加上列名,结尾加上结束

cat /etc/passwd | awk -F ':' 'BEGIN {print "NAME, SHELL"} {print $1 "," $7} END{print "test,bin/test"}' 

(4)搜索包含某个关键字的所有行

awk -F '/test/{print $1}' /etc/passwd  //输出包含test的行的空格切面的第一个
awk -F '/test/{print $0}' /etc/passwd  //输出包含test的行的所有内容

(5)统计某个关键字出现的次数

//统计第二列时间列 是 10:18:27垂涎的次数
awk '{if($2="[10:18:27]")++sum} END{print "[10:18:27]"" "sum}' waves.log

(6)统计ip出现的次数

awk 'BEGIN{"KEY,NUM"}{sum[$2]+=1} END {for(i in sum) print i " " sum[i]}' waves.log

(7)统计出现最多次数的ip

awk 'BEGIN{"KEY,NUM"}{sum[$2]+=1} END {for(i in sum) print i " " sum[i]}' waves.log | sort -t " " -k 2 -n

-t 指定分隔符 -k 指定列 -g 按照常规数值排序 -n 根据字符串数值比较 -r 逆序

(8)输出统计结果到另一个文件

echo | awk 'BEGIN{"KEY,NUM"}{sum[$2]+=1} END {for(i in sum) print i " " sum[i] >> "test.log"}' waves.log | sort -t " " -k 2 -g -r 

 

以上是比较常用比较有用的一些命令,更多命令请移步:http://man.linuxde.net/awk

posted @ 2017-12-20 11:06  jiguojing  阅读(207)  评论(0)    收藏  举报