linux 三剑客之2-awk

  1. awk命令格式
  2. pattern 表达式
  3. action 行为表达式
  4. awk 例子
  5. awk 实战演练题目

根据定位到的数据行处理其中的分段

awk命令格式

awk 'pattern{action}'

awk 'BEGIN{}END{}' 开始BEGIN和结束END
awk '/regexp/' 正则匹配
awk '/aa/,/bb/' 区间选择
awk '$2~/xxx/' 字段匹配
awk 'NR==2' 取第二行
awk 'NR>1' 去掉第一行
  • -F “XXX” 参数指定字段分隔符

  • BEGIN{FS=”XXX”} 也可以表示分隔符

  • $0 代表整行

  • $N 代表第N个字段

  • $NF 代表最后一个字段

pattern 表达式

  • 正则匹配
    • 整行匹配 awk '/pattern/'
    • 字段匹配 awk '$1~/pattern/'
  • 行数表达式
    • 取第二行 awk 'NR==2'
    • 去掉第一行 awk 'NR>1'
  • 比较表达式
    • awk '$2>2'
    • awk '$1=="b"'
  • 区间选择
    • awk '/aa/,/bb/'
    • awk '/1/,NR==2'

action 行为表达式

  • 打印
    • {print $0}
    • {print $2}
  • 赋值
    • {$1="abc"}

awk 例子

[root@iZwz9f92w7soch5m251ghgZ ~]# ps | awk 'BEGIN{print "start"}{print $0}END{print "end"}'
start
    PID TTY          TIME CMD
  54705 pts/2    00:00:00 bash
  90695 pts/2    00:00:00 ps
  90696 pts/2    00:00:00 awk
end
[root@iZwz9f92w7soch5m251ghgZ ~]# echo 1:2:3 | awk 'BEGIN{RS=":"}{print $0}'
1
2
3
[root@iZwz9f92w7soch5m251ghgZ ~]# echo '1
> 2
> 3
> 4
> 5' | awk '/2/,/4/'
2
3
4
[root@iZwz9f92w7soch5m251ghgZ ~]# echo '1
2
3' | awk '$1~/2/'
2
[root@iZwz9f92w7soch5m251ghgZ ~]# ps
    PID TTY          TIME CMD
  54705 pts/2    00:00:00 bash
  90720 pts/2    00:00:00 ps
[root@iZwz9f92w7soch5m251ghgZ ~]# ps | awk '{print $NF}'
CMD
bash
ps
awk
[root@iZwz9f92w7soch5m251ghgZ ~]# echo '1
2
3' | awk '$1>2'
3
[root@iZwz9f92w7soch5m251ghgZ ~]# echo '1,10
> 2,20
> 3,30' | awk 'BEGIN{a=0;FS=","}{a+=$2}END{print a,a/NR}'
60 20

awk 实战演练题目

  • 从nginx.log 中找出所有 404 和 503 报错的 log 数据,取出前 3 条数据
    less nginx.log | awk '$9~/404|500/' | awk 'NR<4'
  • 从nginx.log中找出访问量最高的ip,统计分析,去除top3的ip和数量。
    less access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -3

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。
My Show My Code