Tente isto:
$ awk 'FNR==NR{a[$1]=$0;next};{print a[$1]}' file2 file1
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?
Tente isto:
$ awk 'FNR==NR{a[$1]=$0;next};{print a[$1]}' file2 file1
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
Tags diff text-processing awk join columns