文本处理工具之awk

原文链接:文本处理工具之awk
发布时间:2018-11-23 23:09:40

awk是一个文本处理工具,也是一种脚本语言。我常使用的就是下面的两个功能。

基本格式:

1
awk -F [str]  'BEGIN{comand1}{commad2}END{command3}' filename

-F 后面的跟的是分割符号,可以是一个字符,也可以是字符串.

中间的命令必须用单引号括起来

BEGIN表示开始循环开始前执行的命令,执行一次

END表示循环结束后执行的命令,执行一次

commnad2表示每处理一行,就执行一次

BEGIN和END可以省略

参加下面的实例:

过滤

1
<RedisCommandWithOutReplyValue> Failed to execute command:LPUSH, key:PROC|FAST|109, value:call AddLottery(13940887,149,464,129868120,9,'269,1037,781,525,1035',129868120,0);

以上是一行错误日志,test.txt中有大量的这样格式的日志,但是我仅需要过滤出AddLottery后的第1个和第4个数字。命令如下:

1
awk '{print $8}' test.txt |awk -F ',' '{printf  "%s,%s\n",$1, $4}'|awk -F '(' '{print $2}'

输出:

1
13940887,129868120

统计

接着上面的日志,假设还有一个需求:

对上面输出的结果,第一个数字要累加求和:

sum.txt 内容如下:

1
2
3
13940887,129868120
13940882,129868122
13940880,129868121

命令:

1
awk -F ',' 'BEGIN{sum=0;}{sum+=$1;}END{print sum}' sum.txt

输出:

1
41822649