awk是一个文本处理工具,也是一中脚本语言。我常使用的就是下面的两个功能。
基本格式:
awk -F [str] ‘BEGIN{comand1}{commad2}END{command3}’ filename
-
-F 后面的跟的是分割符号,可以是一个字符,也可以是字符串.
-
中间的命令必须用单引号括起来
-
BEGIN表示开始循环开始前执行的命令,执行一次
-
END表示循环结束后执行的命令,执行一次
-
commnad2表示每处理一行,就执行一次
-
BEGIN和END可以省略
参加下面的实例:
过滤
<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个数字。命令如下:
awk '{print $8}' test.txt |awk -F ',' '{printf "%s,%s\n",$1, $4}'|awk -F '(' '{print $2}'
输出:
13940887,129868120
统计
接着上面的日志,假设还有一个需求:
对上面输出的结果,第一个数字要累加求和:
sum.txt 内容如下:
13940887,129868120
13940882,129868122
13940880,129868121
命令:
awk -F ',' 'BEGIN{sum=0;}{sum+=$1;}END{print sum}' sum.txt
输出:
41822649