三元运算符内的 awk 字段打印

daf*_*ydd 2 bash awk

如果您熟悉DISA STIGs ,那么RHEL-06-000518的测试是

/bin/rpm -Va 2>/dev/null \
  | /bin/grep '^.M'
Run Code Online (Sandbox Code Playgroud)

我想要做的就是从该测试中提取文件名,并使用包名称和有问题的文件进行漂亮的输出。但是,我的 awk 没有这样做。这就是我正在尝试的:

/bin/rpm -Va 2>/dev/null \
  | grep '^.M' \
  | awk '{print ($2 ~ /./ ? $3 : $2)}'
Run Code Online (Sandbox Code Playgroud)

理论上,如果字段 2 是单字符文件类型之一(%config、%documentation 等,请参阅rpm 手册页) ,则告诉 awk 打印字段 3

但是,我得到的是文件名 if-and-only-if ($2 ~ /./)。否则,即使我用 0 美元代替最后的 2 美元,我也只是得到一个空行。

我缺少什么?

meu*_*euh 5

您的测试$2 ~ /./始终为真,除非$2为空字符串,即行中有 0 或 1 个字段时。你应该试试$2 ~ /^.$/

您还可以将 grep 和 awk 合二为一:

 awk '/^.M/ {print ($2 ~ /^.$/ ? $3 : $2)}'
Run Code Online (Sandbox Code Playgroud)