AWK - 比较后打印完整的输入字符串

Posted

技术标签:

【中文标题】AWK - 比较后打印完整的输入字符串【英文标题】:AWK - Print complete input string after comparison 【发布时间】: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”时打印完整的输入行。 【参考方案1】:
awk 'if ($2=="world") print' file

输出:

你好世界 我的世界

【讨论】:

【参考方案2】:

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

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 谢谢你的提示!我无法想象还有更短的解决方案

以上是关于AWK - 比较后打印完整的输入字符串的主要内容,如果未能解决你的问题,请参考以下文章

awk命令详解

awk命令详解二

awk 变量

AWK 比较两个文件中的两列输出匹配行 - 匹配中缺少行

losbyday Linux下的强大工具之一akw(转),Shell必备

带有变量的 awk 打印字符串