我正在尝试使用下面的代码来打印 Available
是否存在匹配项,否则nil
grep -o 'pattern' test.log | awk '{if($0=="pattern") print "Available"; else print "nil"}'
该if
部分工作正常,但else
如果 grep 为空,我不会得到该部分。
答案1
如果模式不匹配,则grep
不会产生输出,并且awk
程序没有可使用的数据。这就是为什么你永远无法nil
从awk
代码中得到的原因。
另一种方法是
if grep -q 'pattern' test.log; then
echo 'Available'
else
echo 'nil'
fi
选项-q
用于grep
停止实用程序生成任何输出(除了可能的诊断输出)。在这里,我们不需要 的输出grep
,只需要它的退出状态。
使用awk
,您仍然可以根据需要进行测试,但您必须nil
在END
块中有条件地输出字符串:
grep -o 'pattern' test.log |
awk '/pattern/ { print "Available"; found = 1 }
END { if (!found) print "nil" }'
END
即使awk
脚本没有获得任何输入,该块也会被执行。
事实上,你可以用以下方法完成整个事情awk
:
awk '/pattern/ { print "Available"; found = 1; exit }
END { if (!found) print "nil" }' test.log
调用exit
将调用该END
块,因此我们无法删除该found
变量。