grep と awk を使用してエクスポートをフォーマットする

grep と awk を使用してエクスポートをフォーマットする

Zimbra サーバーからデータをエクスポートしたいのですが、新しい行ごとにデータがエクスポートされます。コマンドは次のとおりです。
zmprov -l gaa -v domain.com | grep -e "zimbraForeignPrincipal: " -e "zimbraTwoFactorAuthEnabled: " -e "^mail: "

しかし、結果は次のようになります:
email:
zimbraForeignPrincipal:
zimbraTwoFactorAuthEnabled
関連する属性を含むメールを 1 行にまとめる方法はありますか?

答え1

awk を使用します:

zmprov -l gaa -v domain.com | \
grep -e "zimbraForeignPrincipal: " -e "zimbraTwoFactorAuthEnabled: " -e "^mail: " |\
awk '{delim=(NR%2?"\n":" ");txt=(NR==1?"":txt delim) $0}END{print txt}'

次のことを行います:

  1. 現在の行番号に基づいて区切り文字を設定します。奇数の場合は区切り文字は改行文字、偶数の場合は区切り文字はスペース (この部分delim=(NR%2?"\n":" ")) になります。
  2. すべての行を という変数に収集しますtxt。各行の先頭には、変数自体(つまり、これまでに収集された行)と、前のポイントからの区切り文字が追加されます。ただし、これが最初の行である場合は、代わりに空の文字列が先頭に追加されます(部分txt=(NR==1?"":txt delim) $0
  3. 最後に、変数がtxt印刷されます。

関連情報