Converter texto baseado em registro (multilinhas) para csv com awk

0

Meu arquivo de entrada é assim:

Session: 324098324
Object: dd02:/24
Time: Sat 28 Oct 2017 12:40:41 AM CEST
Status: Error
ID: 5F2B0121-4F2B-481D-B79F-2DC827B85093/16123991

Session: 324321
Object: ad02:/24
Time: Sun 13 May 2018 12:00:43 PM CEST
Status: Ok
ID: 5F2B0121-4F2B-481D-B79F-2DC827B85093/21857092

Session: 132452
Object: xd01:/24
Time: Sun 08 Jul 2018 12:16:56 PM CEST
Status: Error
ID: 5F2B0121-4F2B-481D-B79F-2DC827B85093/21695878

O resultado deve ser: [WRONG]

Session: 324098324, Object: ad02:/24, Time: Sat 28 Oct 2017 12:40:41 AM CEST, Status: Error, ID: 5F2B0121-4F2B-481D-B79F-2DC827B85093/16123991
Session: 324098324, Object: ad02:/24, Time: Sat 28 Oct 2017 12:40:41 AM CEST, Status: Error, ID: 5F2B0121-4F2B-481D-B79F-2DC827B85093/16123991
Session: 324098324, Object: ad02:/24, Time: Sat 28 Oct 2017 12:40:41 AM CEST, Status: Error, ID: 5F2B0121-4F2B-481D-B79F-2DC827B85093/16123991

EDIT: Eu fiz uma grande falha com o formato de saída, o acima não é utilizável como um CSV, eu preciso de um formato como:

Session, Object, Time, Status, ID
324098324, ad02:/24, Sat 28 Oct 2017 12:40:41 AM CEST, Error, 5F2B0121-4F2B-481D-B79F-2DC827B85093/16123991
324098324, ad02:/24, Sat 28 Oct 2017 12:40:41 AM CEST, Error, 5F2B0121-4F2B-481D-B79F-2DC827B85093/16123991
324098324, ad02:/24, Sat 28 Oct 2017 12:40:41 AM CEST, Error, 5F2B0121-4F2B-481D-B79F-2DC827B85093/16123991
    
por T-One 10.08.2018 / 13:39

3 respostas

3

awk -v RS='' '{gsub("\n", ", "); print}' input
    
por 10.08.2018 / 14:11
1

paste disponível? Experimente

paste -s -d"\t\t\t\t\t\n" file
    
por 10.08.2018 / 14:21
0

grep -A4 "Session " myfile | paste -s -d ' \n'

grep encontra a sessão de palavras e imprime 4 linhas após o sucesso.

paste os converte em linha única.

Você pode definir facilmente o delimitador de saída em paste -s -d '||||\n' OR paste -s -d ',,,,\n'

    
por 12.08.2018 / 19:41

Tags