Convertendo dados formatados em linha em formato colunar

3

Eu tenho um conjunto de dados como tal:

Name:      Jim Bean
Vice:      Dice
ID:        AFDSDFDSFDSFASFA
LoginTime: 12343314

Name:      Bob Dylon
Vice:      Trumpets
ID:        AFD232SFDSFASFA
LoginTime: 12343314

Name:      Mary Jane
Vice:      Gambling
ID:        EWDSFDSFASFA
LoginTime: 12343314

.....

Eu preciso organizar isso em um formato colunar. Meu primeiro pensamento é usar awk . Mas estou um pouco preso.

Os rótulos sempre aparecerão na mesma ordem e também sempre mostrarão o mesmo número de pares rótulo / valor em cada grupo (os cabeçalhos não são importantes).

Minha pergunta é: como eu faria isso?

Eu vi dicas de que o comando rs pode ser capaz de fazer algo assim, mas não é padrão em todos os sistemas.

    
por monksy 08.02.2013 / 00:11

2 respostas

3

Você deve publicar a saída desejada com sua pergunta. Meu palpite era este:

$ awk '{ if($2) printf("%s ", $2); else print ""; }' < dataset
Jim Dice AFDSDFDSFDSFASFA 12343314 
Bob Trumpets AFD232SFDSFASFA 12343314 
Mary Gambling EWDSFDSFASFA 12343314

Note que este é um método muito estúpido, mas não valida nada. Se a sua entrada parece diferente do que você postou, provavelmente irá quebrar.

    
por 08.02.2013 / 00:35
3

Você pode fazer assim com o GNU awk, observe o uso do RS e do FS:

<infile awk '{ print $2, $4, $6, $8 }' RS='\n\n' FS=': +|\n' OFS='\t'

Se você quiser manter o cabeçalho:

<infile awk 'NR==1 { print $1, $3, $5, $7 } { print $2, $4, $6, $8 }' RS='\n\n' FS=': +|\n' OFS='\t'

Supondo que todos os seus registros estejam formatados assim, você pode fazer isso com o coreutils:

<infile grep -v '^$' | tr -s ' ' | cut -d' ' -f2- | paste - - - -

Saída:

Jim Bean    Dice    AFDSDFDSFDSFASFA    12343314
Bob Dylon   Trumpets    AFD232SFDSFASFA 12343314
Mary Jane   Gambling    EWDSFDSFASFA    12343314

Saída com cabeçalho:

Name    Vice    ID      LoginTime
Jim Bean        Dice    AFDSDFDSFDSFASFA        12343314
Bob Dylon       Trumpets        AFD232SFDSFASFA 12343314
Mary Jane       Gambling        EWDSFDSFASFA    12343314
    
por 08.02.2013 / 02:47