Como posso comparar dois arquivos com base no valor da primeira coluna?

3

Eu quero comparar dois arquivos com base no valor de sua primeira coluna:

arquivo1

aaa 23 3
bbb 56 6
ccc 45 2

arquivo2

bbb m a
aaa a m
ccc m m

O arquivo de saída deve ser:

aaa  a m
bbb  m a
ccc  m m

Ou seja, precisamos imprimir as 2ª e 3ª colunas do 2º arquivo com a ordem da primeira coluna do primeiro arquivo.

Alguém pode sugerir um script awk para isso?

    
por Rincy Raphael 04.07.2014 / 12:25

2 respostas

5

Tente isto:

$ awk 'FNR==NR{a[$1]=$0;next};{print a[$1]}' file2 file1
    
por 04.07.2014 / 12:36
1

Isso será muito lento para arquivos grandes, mas você pode fazer

$ while read a rest; do grep -w $a file2; done < file1
aaa a m
bbb m a
ccc m m

Um caminho mais rápido, em Perl:

$ cat file1 | perl -lane '$k{$F[0]}=$_;
                END{
                  open(A,"file1");
                  while(<A>){/^(.+?)\s/; print $k{$1}}
               }' file2
aaa a m
bbb m a
ccc m m
    
por 04.07.2014 / 13:44