【问题标题】:How to match multiple strings in awk command如何在awk命令中匹配多个字符串
【发布时间】:2016-06-05 04:27:15
【问题描述】:

我想匹配打印第 10 个字段以以下数字开头的日志文件的行 .我只成功打印了第10个字段。如何打印整行。 简而言之,我想同时将第 10 个字段与多个字符串进行比较

tail -f *log|awk -F" " '/Gateway request received for service type Ussd/ {print $10}'|egrep  '254720|254721|254722|254723|254724|254725|254726|254727|254728|254729|254710|254712|254713|254714|254715|254716|254717|254718|254719|254700|254701|254702'.*  

【问题讨论】:

  • 编辑您的问题以显示简洁、可测试的示例输入和预期输出,这样我们就不会猜测您想要什么。
  • 场景是:我在我们的应用程序中为服务配置了一个电信运营商,其号码以上面提供的系列开头。我只需要打印包含来自该运营商的这些号码的行。这个将帮助我检查该操作员的点击数或传入请求数
  • 现在棘手的部分是数字包含 12 位数字。我需要确保它只会打印包含以 6 位系列开头的数字的行。这将帮助我检查点击次数或为此传入的请求数运算符
  • 第二次尝试:编辑您的问题以显示简洁、可测试的示例输入和预期输出,这样我们就不会猜测您想要什么。

标签: string awk comparison


【解决方案1】:
tail -f *log|awk '/Gateway (and rest)/ && $10~/254720|2542...and rest/' 

应该这样做。

  • -F" " 不是必须的
  • grep 可以(应该)被保存
  • 如果$10 与数字完全匹配,您可以使用$10>lower-bound && $10<upper-bound 而不是$10~/regex/

【讨论】:

  • 谢谢肯特。但我想匹配以 254719 或 254700 或.. 开头并以任何 6 位数字结尾的数字。数字是 12 位数字。我想匹配数字的前 6 位数字(字符串 $10) 与给定的字符串
  • 只需在数字前面添加一个大写运算符,并在末尾添加点和美元运算符以完全匹配 12 char tail -f *log|awk '/Gateway (and rest)/ && $10~/^ 254720.{6}$|^2542...然后休息/'
【解决方案2】:

也许将数字压缩到正则表达式范围会有所帮助

$ ... | awk '/Gate... etc./ && $10~/25471[02-9]|25472[0-9]|25470[01]/'

或进一步分组

$ ... | awk '/Gate... etc./ && $10~/2547(1[02-9]|2[0-9]|0[01])/'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    • 2016-08-27
    相关资源
    最近更新 更多