awk的简单使用

简介

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,则输出匹配全部记录。

实例

  1. 显示包含root的行
    awk '/root/' file
  2. 指定分隔符‘:’,输出第一列和第三列
    awk -F ':' '{print $1"\t"$3}' file
  3. 过滤出包含root的行,指定分隔符‘:’,输出第一列
    awk -F ':' '/root/{print $1}' file
  4. 指定分隔符’:’,输出第二列在(1,10)范围内的行
    awk -F ':' '$2 >1 && $2<=10' file
  5. 对第一列求和
    awk '{sum+=$1} END{print sum}' file
  6. 第一列排序
    awk '{a[NR]=$1}END{s=asort(a,b);for(i=1;i<=s;i++){print i,b[i]}}' a.txt
  7. 删除重复行
    awk '!a[$0]++' file
  8. 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
  9. ng日志分析,访问最多的十个页面
    awk '{a[$7]++}END{for(i in a)print a[i],i|"sort -k1 -nr|head -n10"}' access.log
  10. 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使用及网站日志分析

如果觉得我的文章对您有用,请在支付宝公益平台找个项目捐点钱。 @sxzhou Aug 30, 2017

奉献爱心