Organizar dados em colunas

1

Eu tenho um arquivo big data.txt como este:

6712,04444
6712,02344
6712,02220
6712,02233
5322,00040
5322,02230
5322,42002
4444,03342
4444,03323
11,42023
11,00000
11,23443
11,23232

e então eu quero fazer um data.txt como este do original:

col6712  col5322  col4444   col11
04444     00040    03342    42023
02344     02230    03323    00000
02220     42002             23443 
02233                       23232

Na verdade, eu quero que a primeira coluna do arquivo original seja o número da coluna e o interior de cada linha no arquivo original esteja abaixo da coluna relacionada. existe algum comando no Linux que eu possa alcançar meu objetivo?

    
por zara 12.09.2015 / 01:17

1 resposta

1

Com gnu datamash :

datamash -t, -s -g 1 collapse 2 <data.txt | tr , \t | datamash --no-strict --filler '' transpose

Como datamash requer entrada classificada, a saída será:

11      4444    5322    6712
42023   03342   00040   04444
00000   03323   02230   02344
23443           42002   02220
23232                   02233

Como funciona:
O primeiro datamash s orts e g grupos a , de entrada delimitada por 1 st campo, collaps ing (em lista separada por vírgulas) os valores em 2 nd coluna que correspondem a um único valor na primeira coluna. Então, todas as vírgulas são tr anslated para \t abs e a segunda datamash transpõe as linhas / colunas, permite linhas com número variável de campos via --no-strict e preenche os valores omissos com '' (campo vazio).

Como uma nota lateral, as linhas em sua entrada de amostra já estão agrupadas pelo primeiro campo e classificadas em ordem reversa, para obter o mesmo pedido, você pode reordenar antes de enviar o segundo datamash por exemplo

datamash -t, -s -g 1 collapse 2 <data.txt | tr , \t | \
sort -k1nr | datamash --no-strict --filler '' transpose

produz a saída desejada:

6712    5322    4444    11
04444   00040   03342   42023
02344   02230   03323   00000
02220   42002           23443
02233                   23232
    
por 01.10.2015 / 15:54