确定文件的所有行中的给定列是否符合条件

时间:2016-08-30 17:34:09

标签: bash awk gawk

我们说我的文件内容低于其他内容。

ok     yes    bad
ok     yes    good
ok     yes    bad
ok     yes    good
ok     yes    bad
ok     yes    good

我需要编写一个shell脚本或awk程序来搜索整个第3列,如果整列是好的,那么打印为" Everthing看起来很好"并且如果它发现任何人不好然后打印为"事情不好"

3 个答案:

答案 0 :(得分:2)

使用简单的awk单行条件:

awk 'BEGIN {ok=1;} $3=="bad" { ok=0 } END { if (ok==0) {print "Things are not okay"} else { print "Everything looks good"} }' yourfile
在文件解析开始之前,

BEGIN块将ok初始化为1。默认值:除非发现错误,否则一切正常。

您的文件具有自然空格/制表符分隔,无需调整awk字段分隔符:$3直接是我们需要的第三个字段。只测试是否在某处遇到bad,如果是,请取消ok标记。

END块在文件末尾执行。检查ok并打印相关信息。

答案 1 :(得分:0)

$ awk '$3=="bad"{f=1; exit} END{print (f ? "Things are not OK" : "Everything looks good")}' file
Things are not OK

上面设置了一个标志,exist是主要的工作循环(注意:exit没有退出程序,只是读取输入的隐式循环,所以然后它会在第一次找到"坏"时带你到END部分。所以它尽可能高效,然后在END部分使用三元表达式根据设置或未设置的标志打印相关消息。

如果您将在生活中进行任何文本操作,请阅读Arnold Robbins撰写的有效Awk编程,第4版,以了解如何简洁,高效,稳健和便携地完成它。

答案 2 :(得分:0)

你可以这样做:

awk '$3=="bad"{bad++} END { if (bad>0) print bad " bads found"; else print "all goods!"}' file