AWK
É bastante fácil conseguir isso no awk:
$ awk 'NR==FNR{a[$2]=$1; next}{print $1,a[$1]}' file1.txt file2.txt
3AG33662AAAC
3KC12828ACBA 14
8DG59242BAAD 43
8DG60349AAAC
8DG60565AAAG
8DG60566AAAF 25
8DG60568AAAC
8DG60912AAAF 6
8DG62635AAAC
Não há nada de especial acontecendo - essa técnica é freqüentemente usada por aqueles que usam awk
frequentemente, especialmente ao processar vários arquivos, e é baseada na ideia de carregar informações do primeiro arquivo no array.
A maneira como isso funciona é simples. Primeiro usando NR==FNR
(comparação entre o número da linha processada atual e o número da linha no arquivo atual) lemos tudo de file1.txt
(no exemplo do OP que é s2.txt
) para a matriz associativa de valores. A palavra-chave next
nos permite ignorar o próximo codeblock enquanto ainda estamos no primeiro arquivo. Quando estivermos fora do primeiro arquivo, o próximo codeblock será executado, sempre imprimindo o campo 1 e o item correspondente no array, se existir.
Perl
Usando uma ideia parecida com a do awk, podemos conseguir um resultado similar em Perl assim:
perl -lane 'if($F[1]){$hash{$F[1]}=$F[0]}else{print "$_ $hash{$_}"}' file1.txt file2.txt