Mesclar rótulos de linhas com campos duplicados

0

Eu tenho um arquivo de texto bastante grande (milhares de linhas) no seguinte formato:

123.123 5  
123.123 91  
156.456 45  
233.185 85  
233.185 4  
257.448 1  
455.456 60  
455.456 2

A primeira coluna é coordenada ordenada (x.y) e a segunda é a etiqueta (0 a 1000). Como pode ser visto, a coordenada 123.123 tem o rótulo 5 e o rótulo 91 ou as coordenadas 156.456 têm apenas o rótulo 45

Eu quero outro arquivo como saída com todas as coordenadas (não duplicadas) e os diferentes rótulos (este rótulo aparecerá várias vezes duplicado), a saída para este exemplo deve ser:

123.123  5   91  
156.456  45   
233.185  85  4  
257.448  1  
455.456  60  2   

Minha idéia era remover cadeias de caracteres duplicadas (coordenadas, portanto, apenas a primeira coluna), deixando etiquetas sozinhas e, em seguida, reorganizar as linhas ou outra maneira, mas estou preso com quais comandos usar. Outra opção é com bancos de dados.

    
por Pablo 07.09.2015 / 09:45

2 respostas

1

parece o trabalho de um awk

 awk '{ c[$1]=c[$1] "\t" $2 ; } END { for ( c2 in c ) printf c2 c[c2] "\n" ; } '

onde

  • c[$1]=c[$1] "\t" $ 2 armazenará rótulo,
  • A cláusula END é executada no final do arquivo.
  • for ( c2 in c ) printf c2 c[c2] "\n" ; irá percorrer as coordenadas, imprimindo o rótulo.
por 07.09.2015 / 09:56
0
perl -p0e 'while(s/^(\S+)( .*)(\n)//m){}'

A ideia básica é:

  • -p0 carrega o arquivo na memória e imprime no final;
  • -e executa o próximo argumento no arquivo carregado
  • enquanto possível, substitua <word> <line>\n<word> por <word> <line>
por 07.09.2015 / 10:44