coletar conteúdo de várias linhas em uma única saída

2

suponha que eu tenha um arquivo de texto com muito conteúdo, incluindo linhas como estas:

...    
...
ABCD1 1234 12345
XYZ
foo bar 1234597890
...
DEFG2 5678 56789
XYZ
foo bar 0987654321
...
...

e preciso extrair a sequência de dados usando grep -C1 "XYZ" . Agora, o que eu preciso fazer é montar uma saída parecida com:

ABCD1 1234567890 12345 1234
DEFG2 0987654321 56789 5678

Eu sei que posso usar grep -z "XYZ" para me livrar da linha "Não me importo" e usar awk para extrair dados de uma linha para montá-la da maneira que desejo. mas o que eu sinto falta é: Como posso remover o /n fom uma linha antes do meu grep plus na linha da correspondência grep ? para que eu possa canalizar os dados em uma única linha para awk ?

    
por cerr 26.06.2018 / 00:29

1 resposta

2

Seria mais elegante fazer a coisa toda em awk , mas se você quiser algo rápido e sujo, basta definir o separador awk do registro igual ao separador grep group - e, em seguida, imprimir o campos delimitados por espaços em branco desejados na ordem desejada:

grep -C1 XYZ file | awk -vRS='\n--' '{print $1, $NF, $3, $2}'
ABCD1 1234597890 12345 1234
DEFG2 0987654321 56789 5678
    
por 26.06.2018 / 01:15