对于我来说,一个常见的awk用法是测试程序的输出,并确保其中有一行并打印期望值。例如,如果pattern number小于或等于某一值,例如100,则行可以是number和awk测试。问题是,如果程序更改了输出,因此不再打印pattern,那么天真的awk程序(awk '/pattern/ {exit $2 > 100}')就会“成功”,并且不会做它应该做的事情。
我知道如何“解决”这个问题。awk '/pattern/ {c = $2 > 100 ? 2 : 1} END {exit c ? c - 1 : 2}'或使用grep与awk,但这似乎冗长和不雅,更不用说很难记住做。有更简单更自然的方法吗?也许除了awk以外还有别的东西?
发布于 2021-02-04 13:24:28
我相信你所追求的是以下逻辑:
awk -v c=2 '/pattern/{c=!($2<100)}END{exit c}'如果将c的默认值设置为2,则在找不到pattern值时,默认退出状态为2。如果找到pattern,它将用1(如果是$2 >= 100 )和0 (如果是$2 < 100 )覆盖该值。
https://stackoverflow.com/questions/66046253
复制相似问题