首页 > 解决方案 > awk 命令打印 unix 文件中存在模式且找到的模式后的数值大于 100 的所有行

问题描述

我有一个具有以下格式的日志文件。我在为以下场景编写 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

预期输出:total 存在且总计 > 100 的所有行

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

标签: awk

解决方案


您尝试测试的字段并不总是从一开始就排在第 9 位,但从最后开始总是排在第 1 位:

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

推荐阅读