Formatar exportação usando grep e awk

Formatar exportação usando grep e awk

Gostaria de exportar dados do servidor zimbra, mas ele exporta dados a cada nova linha, meu comando:
zmprov -l gaa -v domain.com | grep -e "zimbraForeignPrincipal: " -e "zimbraTwoFactorAuthEnabled: " -e "^mail: "

mas o resultado é semelhante a:
email:
zimbraForeignPrincipal:
zimbraTwoFactorAuthEnabled
Existe alguma maneira de ter email com atributos relacionados em uma linha?

Responder1

Use 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}'

Ele faz o seguinte:

  1. Define o delimitador com base no número da linha atual: se for ímpar, então o delimitador é uma nova linha, se for par, o delimitador é um espaço (esta é a delim=(NR%2?"\n":" ")parte).
  2. Coleta todas as linhas em uma variável chamada txt. Cada linha é anexada com a própria variável (ou seja, as linhas coletadas até agora) e o delimitador do ponto anterior, a menos que esta seja a primeira linha, caso em que uma string vazia é anexada (a txt=(NR==1?"":txt delim) $0parte)
  3. Finalmente, a variável txté impressa.

informação relacionada