使用 grep 和 awk 格式化导出

使用 grep 和 awk 格式化导出

我想从 zimbra 服务器导出数据,但是它会在每一行都导出数据,我的命令是:
zmprov -l gaa -v domain.com | grep -e "zimbraForeignPrincipal: " -e "zimbraTwoFactorAuthEnabled: " -e "^mail: "

但结果如下所示:
电子邮件:
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打印该变量。

相关内容