Parece um trabalho para awk
. Permite de alguma forma o uso de matrizes multidimensionais associativas.
O seguinte script bash deve fazer o trabalho.
awk ' { Nb[$1]++;b[$1][Nb[$1]]=$2 }
END{ for (i in Nb) {
printf("%s ", i);
for (j = 1 ; j<=Nb[i]; j++) printf("%ld ", b[i][j]);
printf(" \n") ; }
}' aaa.txt | sort
Algumas notas:
-
Na primeira parte,
{...}
varre todo o arquivo externoaaa.txt
e carrega os arraysb[][]
e o número de ocorrências de cada chaveNb[]
(talvez você tenha 4 instâncias de chave3 e 12 de key1 ...). -
Na parte
END{...}
de cada chave encontradafor (i in Nb)
imprime a chave sem nova linha (printf(...)
) e, em seguida, para cada entrada com o índice 1..Nb [i] , imprimirá o valor. Por fim, imprima uma nova linha. -
O canal final
|
classificará a saídakey1: 1 4 key2: 2 5 key3: 3 6
-
É claro que, se forem necessários layouts diferentes, é possível criá-los a partir do exemplo acima e alterar a ordem de aninhamento dos ciclos for.