Bash/awk:当模式不存在时,仅打印一次“不存在”,而不是每行

Posted

技术标签:

【中文标题】Bash/awk:当模式不存在时,仅打印一次“不存在”,而不是每行【英文标题】:Bash/awk: when pattern not present print "not present" only once, not per line 【发布时间】:2016-03-01 15:48:07 【问题描述】:

我正在我的文件的一个字段中搜索一个包含多行的模式。如果模式存在,我想输出该行。但是,如果模式根本不存在,我想输出类似“缺失”的内容。

awk 'if($2=="123456")print $0 else print "not present" ' file.txt

(由于逐行输出,这不起作用)

我的问题是这里的逐行输出。每行有一个输出,但我想要与模式匹配的行或术语“缺失”(仅一次)。

感谢您的各种帮助!我尝试了几种方法,包括 grep、if else、循环,但没有任何效果。

【问题讨论】:

这听起来很简单。但是不知道你到底想要什么。请举例说明需求。 我的问题解决了。不过还是谢谢你。 【参考方案1】:

字里行间我认为你想要这样的东西:

awk '$2 == "123456"  print; f = 1  END  if (!f) print "missing" ' file

这会在第二个字段匹配时打印该行并设置标志f。处理完文件后,如果标志仍未设置,则打印消息。

【讨论】:

谢谢!这正是我想要的!

以上是关于Bash/awk:当模式不存在时,仅打印一次“不存在”,而不是每行的主要内容,如果未能解决你的问题,请参考以下文章

Bash awk 打印匹配的分隔符

Linuxgrep命令

如何在我的应用程序中仅打印一次警报视图?

设置浏览器不存缓存

django面试六

当计算机在我的代码中要求时我没有输入数组中存在的键时,如何打印“数组中不存在键(元素)”