awk :
Supondo arquivos de entrada contacts.USA e contacts.BRAZIL .
awk '/Name/{ printf "%s | %s",FILENAME,$0 }
/Gender|Age|Address/{ printf " | %s",$0; if($0~/Address/) print "" }' contacts.*
-
/Name/{ printf "%s | %s",FILENAME,$0 }- capturando a linha com a palavra-chaveName, anexando o nome do arquivoFILENAMEao início da sequência resultante -
if($0~/Address/) print ""- imprime o separador de registro (nova linha) depois de encontrar a linha comAddresskeyword
A saída:
contacts.BRAZIL | Name:Tom Paul | Gender:Male | Age:26 | Address: Sau Paulo
contacts.USA | Name:John Due | Gender:Male | Age:21 | Address: Texas
contacts.USA | Name:Ed Mundo | Gender:Male | Age:41 | Address: California