我们说我的文件内容低于其他内容。
ok yes bad
ok yes good
ok yes bad
ok yes good
ok yes bad
ok yes good
我需要编写一个shell脚本或awk程序来搜索整个第3列,如果整列是好的,那么打印为" Everthing看起来很好"并且如果它发现任何人不好然后打印为"事情不好"
答案 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