awk: equivalente do “\ G” do mysql para imprimir dados tabulados em múltiplas linhas

2

Existe um equivalente a "\ G" do mysql no final da consulta mas awk (ou similar) que irá imprimir dados tabulados de um arquivo de texto em várias linhas com o cabeçalho próximo a ele? Algo que não importa quantas colunas estão no arquivo. Por exemplo:

columnA    columnXYZ   columnBLAHBLAH
foo        bar        foobar
blah       blahblah   blahblahblah
[...]

Vai se transformar em:

************ 1. row ***********
       columnA: foo
     columnXYZ: bar
columnBLAHBLAH: foobar
************ 2. row ***********
       columnA: blah
     columnXYZ: blahblah
columnBLAHBLAH: blahblahblah
[...]
    
por 719016 13.02.2012 / 12:30

1 resposta

4

Um caminho:

Conteúdo de infile :

columnA    columnXYZ   columnBLAHBLAH
foo        bar        foobar
blah       blahblah   blahblahblah

Conteúdo de script.awk :

FNR == 1 { 
    split( $0, header )
}

FNR > 1 { 
    printf "************ %d. row ************\n", FNR-1
    for ( i = 1; i <= NF; i++ ) { 
        printf "%14s: %-14s\n", header[ i ], $i
    }   
}

Execute o script:

awk -f script.awk infile

E saída:

************ 1. row ************
       columnA: foo           
     columnXYZ: bar           
columnBLAHBLAH: foobar        
************ 2. row ************
       columnA: blah                                                                                                                                                                                                                         
     columnXYZ: blahblah                                                                                                                                                                                                                     
columnBLAHBLAH: blahblahblah
    
por 13.02.2012 / 13:02

Tags