awk命令打印存在模式的unix文件中的所有行,找到的模式后的数值大于100

时间:2018-05-17 22:06:40

标签: awk

我有一个格式低于日期的日志文件。 我在编写以下场景的unix命令时遇到问题:

日志中的行

—---count of xyz
{  "_id" : "xyz",  "total" : 70 }
{  "_id" : "def",  "total" : 100 }
{  "_id" : "xyz",  "total" : 180 }
—Count of abcd
{  "_id" : [ "ABCD" ],  "total" : 94 }
{  "_id" : [ "EFGH" ],  "total" : 94 }

我使用以下命令仅打印总数大于100的行。但它不能按预期工作。 我们怎样才能做到这一点?

My command is 
grep "total" abcd.log | awk '$9 > 50  {print ;}' | more

预期产出: 总存在的所有行和总数> 100

{  "_id" : "xyz",  "total" : 180 }

2 个答案:

答案 0 :(得分:2)

您尝试测试的字段从一开始就不是第9个字段,但从结尾开始始终为1:

$ awk '/total/ && ($(NF-1) > 100)' file
{  "_id" : "xyz",  "total" : 180 }

答案 1 :(得分:0)

你问awk但是grep可以更简单一些:

grep '"total" *: *[0-9]\{3,\} *}$' input

如果total是一个唯一键,这也应该有效:

grep '"total" *: *[0-9]\{3,\}' input

这些也可以打印,例如011,但必要时可以修复。