imprimindo dados baseados em linha em um formato de tabela no Linux

1

Eu tenho os dados abaixo em um arquivo:

col1 col2 col3 subcol1 subcol2 subcol3
               subcol4 subcol5 subcol6
          col4 subcol7 subcol8 subcol9
               subcol10 subcol11 subcol2

Os dados são delimitados por espaços. Sem guias Quero converter esses dados conforme mostrado abaixo:

-------------------------------------------------------
col1  | col2 | col3  |   subcol1  | subcol2 | subcol13     
                       --------------------------------
      |      |       |   subcol4  | subcol5 | subcol6
              -----------------------------------------         
      |      | col4  |   subcol7  | subcol8 | subcol9     
                       --------------------------------
      |      |       |   subcol10 | subcol11| subcol12  
-------------------------------------------------------

Como posso conseguir isso?

Editado

Eu tentei abaixo do comando

sed -r -e 's/ {5}/\t/g' -e 's/ /\t/g' file.in | sed -e 's/\t/_|/g'|  column -t -s '_'

Produz

col1  |col2 |col3  |subcol1  |subcol2  |subcol13     
      |     |      |subcol4  |subcol5  |subcol6
      |     |col4  |subcol7  |subcol8  |subcol9     
      |     |      |subcol10 |subcol11 |subcol12    

Só precisa dessa linha para preencher isso

    
por wazza 28.08.2017 / 20:37

1 resposta

2

Acabei com o seguinte script awk .

awk '{gsub(/ {1,5}/,"\t|")}1' infile.txt | \
awk -F'|' 'NR>1{for(i=1;i<=NF;i++) if ($i=="\t") c++;
           printf("%*s",(c*8),"\t-");
           for (fill=1;fill<=length($0)+c;fill++)printf "-";
           printf("\n%s\n",$0);c=0;next} {print $0}'

A saída é:

col1    |col2   |col3   |subcol1        |subcol2        |subcol3
                        -----------------------------------     
        |       |       |subcol4        |subcol5        |subcol6
                --------------------------------------          
        |       |col4   |subcol7        |subcol8        |subcol9
                        -------------------------------------   
        |       |       |subcol10       |subcol11       |subcol2
    
por 28.08.2017 / 23:53