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 - 比较后打印完整的输入字符串的主要内容,如果未能解决你的问题,请参考以下文章