【问题标题】:AWK - Print complete input string after comparisonAWK - 比较后打印完整的输入字符串
【发布时间】:2016-05-14 13:52:19
【问题描述】:

我有一个文件 a.text:

hello world
my world
hello universe

如果第二个单词是“world”,我想打印完整的字符串:

[root@sc-rdops-vm18-dhcp-57-128:/var/log] cat a | awk -F " " '{if($2=="world") print $1}'
hello
my

但我想要的输出是:

[root@sc-rdops-vm18-dhcp-57-128:/var/log] cat a | awk -F " " '{if($2=="world") print <Something here>}'
hello world
my world

关于我如何做到这一点的任何指示?

提前致谢。

【问题讨论】:

  • 我只想在第二个元素为“world”时打印完整的输入行。

标签: bash awk


【解决方案1】:
awk '{if ($2=="world") {print}}' file

输出:

你好世界 我的世界

【讨论】:

    【解决方案2】:

    首先,由于您正在编写单个 if 语句,因此您可以使用 awk 'filter{commands;}' 模式,就像这样

    awk -F " " '$2=="world" { print <Something here> }'
    

    要打印整行,您可以使用print $0

    awk -F " " '$2=="world"{print $0}' file
    

    可以写成

    awk -F " " '$2=="world"{print}' file
    

    但是{print}是默认动作,所以可以像这样在过滤器后面省略:

    awk -F " " '$2=="world"' file
    

    甚至不用 -F 选项,因为空格是默认的 FS 值

    awk '$2=="world"' file
    

    【讨论】:

      【解决方案3】:

      如果您想/必须使用awk 来解决您的问题:

       awk '$0~/world/' file.txt
      

      如果一行(即$0)与字符串“world”(即~/world/)匹配,则打印整行

      如果您只想检查第二列的world

       awk '$2 == "world"' file.txt
      

      【讨论】:

      • 您不需要$0~/world/ 中的$0~,只需/world/ 就足够了。
      • @EdMorton 谢谢你的提示!我无法想象还有更短的解决方案
      猜你喜欢
      • 1970-01-01
      • 2011-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多