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