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

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

如果你熟悉DISA STIG,测试为RHEL-06-000518

/bin/rpm -Va 2>/dev/null \
  | /bin/grep '^.M'

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

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

理论上,如果字段 2 是单字符文件类型之一(%config、%documentation 等,请参阅rpm 手册页

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

我缺少什么?

答案1

你的测试$2 ~ /./总是正确的,除了$2空字符串时,即当行中有 0 或 1 个字段时。你应该试试$2 ~ /^.$/

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

 awk '/^.M/ {print ($2 ~ /^.$/ ? $3 : $2)}'

相关内容