对于我来说,一个常见的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 05: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
复制