根据定位到的数据行处理其中的分段
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
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。