awkを使用してデータを設定された形式で並べ替える

awkを使用してデータを設定された形式で並べ替える

私は走っています

rpm -Vqf 

各種システムファイルが正しいことを確認してください。以下はサンプル出力です。

S.5....T.  c /etc/enviro
missing     /var/run/abrt
file /etc/bluetooth is not owned by any package

ファイルのフルパスを表示できるように、出力は次のようになります。権限が/ownr/checksum...正しいか、欠落しているか、パッケージの一部ではありませんか?

/etc/enviro|S.5....T.
/var/run/abrt|missing
/etc/bluetooth|not owned

ずっと見守ったが、awkその妥当性を置くことができなかった。

答え1

出力が次のようになるとします。いつも提供された3つの例に示すように、次のことが機能します。

rpm -Vqf <arguments> | awk '/(\/[^/ ]+)+$/ {printf("%s|%s\n",$NF,$1);next} /is not owned/{printf("%s|not owned\n",$2)}'

この呼び出しはawk次のことを行います。

  • 終わるファイルパスである最後のレコード(=スペースで区切られた文字列)を印刷するには、絶対ファイルパス(たとえば、aの/後に「スラッシュ以外の文字」(空白なし)が複数あり、パターンが繰り返される可能性があります)を使用します。その後、最初の記録が出ます。次に、実行のために次の入力ラインにジャンプします(そうでない場合は、同じ入力ラインに対して複数の出力を取得できます)。printf|
  • 行に「未所有」という文字列が含まれている場合は、2番目のレコード(ファイルパスなど)を印刷します。出力が常に読み取られると仮定 file <name> is not owned ...) の後に固定文字列 "notowned" が続きます。

関連情報