Vamos começar com um arquivo de entrada de amostra:
$ cat dump.txt
some: other
email: [email protected]
fullName: LDAP Proxy2
gui: 987
other: thing
Para extrair as linhas desejadas e reformatá-las como CSV:
$ awk '/email:|fullName:|gui:/{s=s", "$0} END{print substr(s,3)}' dump.txt
email: [email protected], fullName: LDAP Proxy2, gui: 987
Como funciona:
-
/email:|fullName:|gui:/{s=s", "$0}
Esta é uma condição seguida por uma declaração. A condição é a expressão regular
/email:|fullName:|gui:/
, que é verdadeira apenas para linhas que contêm uma das strings que você está procurando. Em expressões regulares, o símbolo|
significa lógica-ou.Se a condição for verdadeira, a instrução será executada. A instrução faz com que uma vírgula, um espaço, a linha atual seja anexada à variável
s
.awk
implicitamente percorre todas as linhas do arquivo e o acima é executado em cada linha. -
END{print substr(s,3)}
Quando terminarmos de ler o arquivo de entrada, queremos imprimir todos, exceto os dois primeiros caracteres de
s
. Os dois primeiros caracteres são "," que são supérfluos. A funçãosubstr
é usada para removê-los.
Saída de amostra
Usando o arquivo que você forneceu em paste.ee
e selecionando para os campos que você especificou nos comentários ("mail: "," fullName "e" uid "), eu obtenho:
$ awk '/mail:|fullName:|uid:/{s=s", "$0} END{print substr(s,3)}' dump.txt
mail: [email protected], uid: pgroce, fullName: Patti K. Groce
Todos os campos são encontrados.
Entrada com campos em branco
De acordo com os comentários, considere dump3.txt
, que tem algumas entradas em branco no final:
$ cat dump3.txt
other: thing
mail: [email protected]
uid: pgroce
fullName: Patti K. Groce
mail:
mail:
Other: Thing
mail:
$ awk '/mail:|fullName:|uid:/{s=s", "$0} END{print substr(s,3)}' dump3.txt
mail: [email protected], uid: pgroce, fullName: Patti K. Groce, mail:, mail:, mail:
Conforme solicitado, as entradas vazias são impressas como entradas vazias.