【问题标题】:Find the word after the pattern using Awk使用 awk 查找模式后面的单词
【发布时间】:2013-07-18 16:58:02
【问题描述】:

我已执行以下命令,并将数据存储在 sample.txt 文件中。

chkconfig --list | grep postfix > sample.txt

现在这个文件包含以下输出:

postfix         0:off   1:off   2:on    3:on    4:on    5:on    6:off

现在我需要提取2: 之后的字符串。输出应该是on

无论如何我们都可以使用awkgrep 找到它吗?

【问题讨论】:

  • 试试....|grep -Po '(?<=2:)\w+'
  • @Kent 也会匹配22:2 之前的空格可能就足够了
  • 或任何非数字字符。

标签: awk grep find


【解决方案1】:

如果提取是临时文件的唯一目的,则awk 绕过临时文件创建的一种方法:

chkconfig --list | awk '/postfix/{$0=substr($4,3)}1'

【讨论】:

    【解决方案2】:

    awk 可以做到这一点:

     awk -F '[: ]+' '{print $7}'
    

    你也不需要 grep。以下 awk 将完成这项工作:

    chkconfig --list | awk -F '[: ]+' '$1 == "postfix" {print $7}'
    

    【讨论】:

    • 感谢您的 cmets。
    • 感谢您的快速回复。但我仍然无法得到结果。我的要求是,我在“sample.txt”文件中有输出。我想grep "2:" 的状态,即'"on"。能否请您为我提供解决方案。
    • 以上 awk 命令将为您提供on 作为输出,它位于2: 旁边。你没有得到相同的输出吗?
    • 解决方案在技术上是正确的。也许考虑分成两个步骤。这是基于相同主题的轻微变化:chkconfig --list | awk '/^postfix[[:space:]]/{print $4}' | cut -f1 -d':'
    • Dilip:如果你需要从特定的中间文件中提取结果,只需用 cat 提取即可。如果预先过滤(如您的示例),您还将跳过$1 == "postfix"part。 IE。最终解决方案应该是cat sample.txt | awk -F '[: ]+' '{print $7}'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-18
    • 2016-05-27
    • 2021-12-21
    • 1970-01-01
    相关资源
    最近更新 更多