Reorganizar o conteúdo do arquivo com base em duas colunas

6

Entrada: o arquivo contém dados:

ID   Location  Domaind
1     20        X
1     5         y
1     25        Z
2     1         L
2     150       N
2     50        M
3     50        J
4     33        k
4      3        I

Eu tenho que organizar esses dados com base no ID e no local. A média primeiro organizou ID = 1 em ordem crescente de localização e, em seguida, imprimiu os domínios da esquerda para a direita na mesma ordem que na localização.

Saída como:

1      Y-X-Z
2      L-M-N
3        J
4       I-K
    
por Athar Hussain 31.10.2017 / 10:07

1 resposta

3

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 como V ersion sort.
  • e awk apenas lendo para os campos em matriz chamada arr 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))
    
por αғsнιη 31.10.2017 / 10:57