Nota: todos os itens abaixo (obviamente) assumem que a linha uid:
será sempre o último de cada grupo.
No entanto, todos eles trabalham com %
caracteres nos dados.
Se você quiser salvar todos os dados e imprimi-los no final,
aqui está uma abordagem um pouco simples, usando matrizes:
awk 'BEGIN {count=0}
/mail:|fullName:|uid:/ {s[count] = s[count] ", " $0} /uid:/ {count++}
END {for (i=0; i<count; i++) print substr(s[i],3)}' dump2.txt
Se você quiser gerenciar os campos individualmente (no final),
use uma matriz bidimensional:
awk 'BEGIN {count=0}
/mail:|fullName:|uid:/ {s[count][$1] = $0} /uid:/ {count++}
END {for (i=0; i<count; i++) printf "%s, %s, %s\n",
s[i]["mail:"], s[i]["fullName:"], s[i]["uid:"]}' dump2.txt
(Como a resposta da glenn, isso pressupõe que as strings mail:
, fullName:
e uid:
apareçam como o primeiro campo na linha.)
Eu não sei o que você quis dizer quando mencionou alinhamento,
mas, a partir daqui, é fácil alinhar os campos na sua saída:
awk 'BEGIN {count=0}
/mail:|fullName:|uid:/ {s[count][$1] = $0} /uid:/ {count++}
END {for (i=0; i<count; i++) printf "%23s, %23s, %s\n",
s[i]["mail:"], s[i]["fullName:"], s[i]["uid:"]}' dump2.txt
mail: [email protected], fullName: Bogus Bogus, uid: 666
mail: [email protected], fullName: Bogus2 Bogus2, uid: 667
ou
awk 'BEGIN {count=0}
/mail:|fullName:|uid:/ {s[count][$1] = $0} /uid:/ {count++}
END {for (i=0; i<count; i++) printf "%-23s, %-23s, %s\n",
s[i]["mail:"], s[i]["fullName:"], s[i]["uid:"]}' dump2.txt
mail: [email protected] , fullName: Bogus Bogus , uid: 666
mail: [email protected] , fullName: Bogus2 Bogus2, uid: 667
ou
awk 'BEGIN {count=0}
/mail:|fullName:|uid:/ {s[count][$1] = $0} /uid:/ {count++}
END {for (i=0; i<count; i++) printf "%-23s %-24s %s\n",
s[i]["mail:"] ",",
s[i]["fullName:"] ",",
s[i]["uid:"]}' dump2.txt
mail: [email protected], fullName: Bogus Bogus, uid: 666
mail: [email protected], fullName: Bogus2 Bogus2, uid: 667
Esta resposta
mostra como você pode determinar o comprimento máximo de dados para cada campo.