【问题标题】:awk command to print all lines in a unix file where a pattern exists and the numerical value after the found pattern is greater than 100awk 命令打印 unix 文件中存在模式且找到的模式后的数值大于 100 的所有行
【发布时间】:2018-05-17 22:06:39
【问题描述】:

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

【问题讨论】:

  • 我用预期的输出编辑了我的问题。预期的输出只有一行。但我的命令会打印所有内容

标签: awk


【解决方案1】:

您要测试的字段并不总是从开始算起第 9 个,但从结束算起总是第 1 个:

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

【讨论】:

    【解决方案2】:

    您要求使用 awk,但 grep 可以更简单一些:

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

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

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

    这些也打印,例如,011,但如果需要,可以修复它。

    【讨论】:

    • 这比 awk 解决方案更简单,它只是通过数值测试值是否大于 100?
    • 这是主观的,但 grep 更广为人知,语言更简单。
    猜你喜欢
    • 2017-12-06
    • 1970-01-01
    • 1970-01-01
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    • 2017-07-19
    相关资源
    最近更新 更多