简介
awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk最大的优势。
来自: http://man.linuxde.net/awk
awk内容丰富,功能强大,在处理日志等格式化数据时应用广泛。
语法
awk [options] 'script' var=value file(s)
awk [options] -f scriptfile var=value file(s)
模式和操作
awk脚本是由模式和操作组成的:
awk '{pattern + action}' {filenames}
首先通过模式过滤文本,然后进行指定操作。
两者是可选的,如果没有模式,则action应用到全部记录,如果没有action,则输出匹配全部记录。
实例
- 显示包含root的行
awk '/root/' file
- 指定分隔符‘:’,输出第一列和第三列
awk -F ':' '{print $1"\t"$3}' file
- 过滤出包含root的行,指定分隔符‘:’,输出第一列
awk -F ':' '/root/{print $1}' file
- 指定分隔符’:’,输出第二列在(1,10)范围内的行
awk -F ':' '$2 >1 && $2<=10' file
- 对第一列求和
awk '{sum+=$1} END{print sum}' file
- 第一列排序
awk '{a[NR]=$1}END{s=asort(a,b);for(i=1;i<=s;i++){print i,b[i]}}' a.txt
- 删除重复行
awk '!a[$0]++' file
- ng日志分析,访问最多的十个ip
格式:
$remote_addr - $remote_user [$time_local] “$request” $status $body_bytes_sent “$http_referer” “$http_user_agent” “$http_x_forwarded_for”
awk '{print $1}' access.log |sort |uniq -c |sort -k1 -nr |head -n10
- ng日志分析,访问最多的十个页面
awk '{a[$7]++}END{for(i in a)print a[i],i|"sort -k1 -nr|head -n10"}' access.log
- 404出现的ip和次数统计
awk '{if($9~/404/)a[$1" "$9]++}END{for(i in a)print i,a[i]}' access.log
参考
awk命令
awk使用入门
linux awk命令详解
Linux Awk使用案例总结(nginx日志统计,文件对比合并等)
Awk使用及网站日志分析