Agrupando em linhas baseadas na mesma última coluna

1

Eu tenho um dado como este

15 23
16 23
17 24
18 24

Eu quero combinar / agrupar os dados na primeira coluna pelos dados da última coluna:

15 16 23
17 18 24

Como fazer isso com awk ?

    
por mathle 05.09.2018 / 10:32

3 respostas

3

com awk :

awk '{ seen[$2]= seen[$2]? seen[$2]FS$1:$1 } 
    END{ for (x in seen) print seen[x], x }' infile
15 16 23
17 18 24

Aqui estamos usando o array seen com a chave da coluna $2 e o valor da coluna $1 . se a chave $2 for a mesma para cada valor, anexe esse valor ao final de seu valor anterior na matriz e, no valor final END print, primeiro, em seguida, sua chave.

A condição Ternary é usada para verificar se, para essa chave, havia valor na matriz antes, se for o caso, então acrescente o novo valor ao final do valor de saída com o padrão F ield S eperador FS entre; senão adicione esse valor como primeiro valor.

    
por 05.09.2018 / 10:49
0
awk '{AA[$2]=AA[$2]" "$1}END{for(i in AA){print AA[i]" "i}}' datafile.txt
    
por 05.09.2018 / 10:50
0
sed -Ee '
   :join
      $!N
      s/(\s\S+)\n(.*)$/ /
   tjoin
   P;D
'  input.txt

Explicação:

  1. Mantenha duas linhas no espaço padrão.
  2. Tente unir as linhas observando os últimos campos das duas linhas no espaço padrão.
  3. Repita este procedimento de junção enquanto os últimos campos são os mesmos.
  4. Em seguida, quando eles diferirem, imprima a primeira parte, que nesse momento contém os primeiros campos de todas as linhas anteriores, separadas por espaço, & o último campo comum. Remova essa parte e volte para mais.
por 06.09.2018 / 05:28