Eu usaria o comando awk
da seguinte forma.
awk '{arr[]=arr[]d[]$NF; d[]="-"}
END{for (x in arr) print x"\t"arr[x]}' <(sort -V <(column -t infile))
-
column -t infile
lê o arquivo e aqui imprime apenas as colunas no alinhamento à esquerda. -
sort -V
classifica o arquivo comoV
ersion sort. - e
awk
apenas lendo para os campos em matriz chamadaarr
com a chave como coluna 1 e valor como respeitando a coluna 3, depois, no final, imprima os elementos. - Aqui eu usei a substituição de processo
<(sort -V <(column -t infile))
enquanto nós poderíamos usar o Pipes se o seu shell não suportá-lo como muru apontado/bin/dash
não.
A saída é:
ID Domaind
1 Y-X-Z
2 L-M-N
3 J
4 I-k
Ou você pode usar como abaixo, em vez de manter o arquivo inteiro na matriz.
awk 'p!= &&p{print l}{l=(!=p)?FS:l"-";p=}' <(sort -V <(column -t in))