使用 grep 和 awk 格式化匯出

使用 grep 和 awk 格式化匯出

我想從 zimbra 伺服器導出數據,但它是在每個新行中導出數據,我的命令:
zmprov -l gaa -v domain.com | grep -e "zimbraForeignPrincipal: " -e "zimbraTwoFactorAuthEnabled: " -e "^mail: "

但結果看起來像:
email:
zimbraForeignPrincipal:
zimbraTwoFactorAuthEnabled
有什麼方法可以將具有相關屬性的電子郵件放在一行中嗎?

答案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最後,列印變數。

相關內容