awk的常用使用笔记

来源:互联网 发布:手机网络配置怎么设置 编辑:程序博客网 时间:2024/05/29 13:20

通常,我用awk都是在日志文件上,查找某一字段,比如,我要查找访问某个接口的ip有多少,nginx日志文件1.txt的一段如下:

127.0.0.1 - - [11/Mar/2015:15:06:45 +0800] "GET / HTTP/1.1" 403 582 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" -127.0.0.1 - - [11/Mar/2015:15:06:45 +0800] "GET /favicon.ico HTTP/1.1" 404 582 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" -127.0.0.1 - - [11/Mar/2015:15:06:47 +0800] "GET /php HTTP/1.1" 301 195 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" -127.0.0.1 - - [11/Mar/2015:15:06:47 +0800] "GET /php/ HTTP/1.1" 200 13348 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" -127.0.0.1 - - [11/Mar/2015:15:06:51 +0800] "GET /php/index.html HTTP/1.1" 200 13348 "http://127.0.0.1:81/php/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" -127.0.0.1 - - [11/Mar/2015:15:07:36 +0800] "GET /php/ HTTP/1.1" 200 13348 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" -

我要找访问index.html的ip,那么可以 

awk '/index/{print $1}' 1.txt
awk是一行一行扫描输入的,默认是以空格分割,但可以用F参数来指定分割符,比如:

awk -F "[-]" '{print $1}' 1.txt
上面就是以横杠为分割

print 是输出,awk分段是从$1开始,而$0是一行的意思,在模式里面可以写正则表达式,比如上面的'/index/{print $1}'就是匹配含有index的一段。

还有,比较常用的一个功能是比较,比如

有个文件叫1.txt,里面有名字,工资每小时,小时数

lilei 4.00 0

fang 3.75 0

haha 4.00 10

wo 5.00 20

我要查找工作时间大于0的人的名字和总工资,则:

awk '$3 > 0 {print $1, $2*$3}' 1.txt


最后,这里面有个问题,不知道发现了没有,awk默认以空格分段,那是多少空格呢?1个?2个?还是不限制?

试验下,空格和tab都是连续无限制的,对于其他分隔符就不行了


参考资料:http://awk.readthedocs.org/en/latest/chapter-one.html



0 0