【问题标题】:How to extract a field which has value greater than a number using AWK or SED如何使用 AWK 或 SED 提取值大于数字的字段
【发布时间】:2020-02-27 06:06:00
【问题描述】:

很抱歉提出这样一个基本问题,但我已经花了好几个小时来解决这个问题!如果每行的第 12 个字段的值大于或等于 x,我需要一个 awk 命令(或类似命令)来查看文本文件并输出到屏幕。

在下面这个例子中,我想获得超过 950 毫秒的事务数

INFO [tomcat-http--25] 2020-02-21 12:33:55,292 - Tranasction task has exceeded 100ms @ 1102ms for [ unique_id1:9502, unique_id2:995351, Serialnumber:514534, Txnid:70828febbb1913 ]

【问题讨论】:

  • 12th 是哪个字段?
  • 1102ms 如果此值大于 950ms,我将尝试捕获
  • 那么像awk '$12 > 950' 这样简单的东西不是不起作用吗?
  • 欢迎来到 Stack Overflow。 SO 是一个面向专业和爱好者程序员的问答网站。目标是您将一些自己的代码添加到您的问题中,以至少显示您为解决这个问题所做的研究工作。

标签: linux awk sed


【解决方案1】:

来自gawkdocs

要强制将字符串转换为数字,请将零添加到该数字 字符串。通过解释任何数字将字符串转换为数字 作为数字的字符串前缀:“2.5”转换为 2.5,“1e3” 转换为 1,000,"25fix" 的数值为 25。字符串 不能解释为有效数字转换为零

所以最好的解决方案是:

awk -v ms=950 '$12+0>ms+0' your_file

-v ms=950: 将一个名为 ms 的 var 传递给 awk 程序的主体

【讨论】:

【解决方案2】:

@JuanDiegoGodoyRobles (++) 玩得很安全,我大胆地选择:

$ awk -v ms=950ms '$12+0 > ms+0' file

或:

$ awk -v ms=666 '$12+0 > ms+0' file

输出:

INFO [tomcat-http--25] 2020-02-21 12:33:55,292 - Tranasction task has exceeded 100ms @ 1102ms for [ unique_id1:9502, unique_id2:995351, Serialnumber:514534, Txnid:70828febbb1913 ]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-26
    • 1970-01-01
    相关资源
    最近更新 更多