三項演算子内のawkフィールドの印刷

三項演算子内のawkフィールドの印刷

おなじみの場合ディサスティグ、テストは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など)の1つである場合rpm のマニュアルページ)

しかし、私が得るのは、if-and-only-if($ 2〜/./)というファイル名です。それ以外の場合は、最後の$ 2を$ 0に置き換えても空の行のみが表示されます。

私は何を見逃していますか?

答え1

空の文字列、つまり行にゼロまたは1つのフィールドがある場合を$2 ~ /./除き、テストは常に正確です。$2あなたはそれを試す必要があります$2 ~ /^.$/

grepとawkを1つにまとめることもできます。

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

関連情報