Sta*_*rry 0 linux bash shell awk grep
当我使用awk和grep来解析日志文件时,我有一个问题.日志文件包含一些带有数字的字符串,例如
Amount: 20
Amount: 30.1
Run Code Online (Sandbox Code Playgroud)
我使用grep来解析关键字"Amount"的行,然后使用awk获取金额并做一笔总和:
命令如下:
cat mylog.log | grep Amount | awk -F 'Amount: ' '{sum+=$2}END{print sum}'
这对我来说可以.但是,有时mylog.log文件不包含关键字"Amount".在这种情况下,我想打印0,但上面的awk命令将不打印任何内容.当grep什么都不返回时,如何让awk打印出来呢?
你可以用这个:
awk '/^Amount/ {amount+=$2} END {print amount+0}' file
Run Code Online (Sandbox Code Playgroud)
有了这个+0技巧,你可以0在没有设置值的情况下进行打印.
没有必要grep + awk.awk一个人可以grep(以及更多东西!):
/^Amount/ {}在以"金额"开头的行上,执行内容{}.amount+=$2 将字段2的值添加到计数器"金额".END {print amount+0}处理完整个文件后,打印出值amount.如果之前未设置,则执行+0打印0.另请注意,无需将"Amount"设置为字段分隔符.它足以使用默认值(空格).
$ cat a
Amount: 20
Amount: 30.1
$ awk '/^Amount/ {amount+=$2} END {print amount+0}' a
50.1
$ cat b
hello
$ awk '/^Amount/ {amount+=$2} END {print amount+0}' b
0
Run Code Online (Sandbox Code Playgroud)