我在使用awk 和grep 解析日志文件时遇到了一个问题。 日志文件包含一些带数字的字符串,例如
Amount: 20
Amount: 30.1
然后我使用 grep 解析带有关键字“Amount”的行,然后使用 awk 获取金额并求和:
命令如下:
cat mylog.log | grep 金额 | awk -F '金额:' '{sum+=$2}END{print sum}'
它对我来说很好用。但是,有时 mylog.log 文件不包含关键字“Amount”。在这种情况下,我想打印 0,但上面的 awk 命令什么也不会打印。当 grep 什么都不返回时,我怎样才能让 awk 打印一些东西?
最佳答案
你可以使用这个:
awk '/^Amount/ {amount+=$2} END {print amount+0}' file
使用 +0
技巧可以打印 0
以防未设置值。
说明
不需要grep + awk。 awk 单独可以 grep(以及更多东西!):
/^Amount/{}
在以“Amount”开头的行上,执行{}
中的内容。amount+=$2
将字段 2 的值添加到计数器“amount”。END {print amount+0}
处理完整个文件后,打印amount
的值。如果之前未设置,则执行+0
会打印0
。
另请注意,无需将“金额”设置为字段分隔符。默认的(空格)就够了。
测试
$ 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
关于linux - grep : print value when grep returns nothing 之后的 awk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25544974/