Formatexport mit grep und awk

Formatexport mit grep und awk

Ich möchte Daten vom Zimbra-Server exportieren, aber in jeder neuen Zeile werden Daten exportiert. Mein Befehl:
zmprov -l gaa -v domain.com | grep -e "zimbraForeignPrincipal: " -e "zimbraTwoFactorAuthEnabled: " -e "^mail: "

aber das Ergebnis sieht folgendermaßen aus:
E-Mail:
zimbraForeignPrincipal:
zimbraTwoFactorAuthEnabled
Gibt es eine Möglichkeit, E-Mails mit zugehörigen Attributen in einer Zeile zu haben?

Antwort1

Verwenden Sie 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}'

Es hat folgende Funktion:

  1. Legt das Trennzeichen basierend auf der aktuellen Zeilennummer fest: Wenn sie ungerade ist, ist das Trennzeichen ein Zeilenumbruch, wenn sie gerade ist, ist das Trennzeichen ein Leerzeichen (dies ist der delim=(NR%2?"\n":" ")Teil).
  2. Sammelt alle Zeilen in einer Variable namens txt. Jeder Zeile wird die Variable selbst (also die bisher gesammelten Zeilen) und das Trennzeichen vom vorherigen Punkt vorangestellt, es sei denn, dies ist die erste Zeile. In diesem Fall wird stattdessen eine leere Zeichenfolge vorangestellt (der txt=(NR==1?"":txt delim) $0Teil).
  3. Abschließend txtwird die Variable ausgedruckt.

verwandte Informationen