awkスクリプトはファイルから特定の単語を検索し、出力を生成します。

awkスクリプトはファイルから特定の単語を検索し、出力を生成します。

次のような行がたくさんあります。

uid: jdoes mail:  [email protected]
mail:  [email protected] uid: mdoes
uid: kdoes mail:  [email protected]
mail:  [email protected] uid: tdoes

次のように並べ替えるにはどうすればよいですか?

uid: jdoes mail:  [email protected]
uid: mdoes mail:  [email protected]
uid: kdoes mail:  [email protected]
uid: tdoes mail:  [email protected]

ベストアンサー1

重要なことに、AWKは何かと一致する行で特定のタスクを実行します。 2 種類の線があるため、各タイプが一致し、異なる方法で印刷されます。 1つの方法は次のとおりです。

awk '/^uid/ { print } /^mail/ { print $3" "$4" "$1"  "$2 }' <your files>

仕組み:

  • この文字で始まる行は、現れるuidように印刷してください。
  • その列で始まる行に対して列を別々に配置します(mail行にあるので、間に余分なスペースがあることに注意してください)。$1$2uid

(この行はファイルに他の行がある場合に便利です。)


他の方法:

awk '/^mail/{$0=$3" "$4" "$1" "$2};1' <your files>

仕組み:

  • print基本的に$0(フルライン)印刷。
  • ;1; { print };
  • 我々は$0ラインマッチングを変更します^mail

(処理して印刷したい場合は、この方法が速くなる可能性があります。ファイル内のすべての行。ドンクリスティに感謝します。 )

おすすめ記事