Como ordenar e juntar-se ao mesmo tempo?

1

Eu tenho 2 arquivos, um com 2 colunas, outro com 1 coluna. O segundo arquivo é classificado usando sort -u. Agora a tarefa é que eu preciso juntar essa coluna com a primeira coluna do primeiro arquivo, que não está ordenada, então qual será a sintaxe? Isso vai funcionar? juntar -j 1 arquivo2.txt sort -s -n -k 1 arquivo1.txt? A saída que eu quero é na verdade a segunda coluna do arquivo 2 após a junção e as entradas uniq nela.

Arquivo 2

1
2
3

Arquivo 1

2  500
1  5000 
1  300
3  3000 
3  300
4  450

Saída

5000
300
500
3000
    
por MiNdFrEaK 28.09.2012 / 10:19

3 respostas

1

Não é necessário usar uma substituição de processo não padrão ( <(...) ) aqui:

sort file1 | join -o1.2 - file2 | uniq
    
por 28.09.2012 / 10:52
2
join file2.txt <(sort file1.txt) | awk '{print $2}'
    
por 28.09.2012 / 10:39
1

Uma maneira de usar sort + awk . Eu classifico o outro arquivo pelo primeiro número e no modo estável. Em awk , comparo as chaves de arquivo1 com as chaves de arquivo2 e não são repetidas, imprimindo-as:

sort -snk1,1 file1 | awk '
    FNR == NR { 
        keys[ $1 ] = 1; 
        next; 
    } 
    !values[ $2 ] && keys[ $1 ] { 
        printf "%s\n", $2; 
        values[ $2 ] = 1; 
    }
' file2 -

Saída:

5000
300
500
3000
    
por 28.09.2012 / 10:43