Aqui está uma solução awk :
$ awk 'FNR==NR{a[$1];next}($1 in a){++a[$1]}
END{for(i in a){print i" "a[i]}}' file1.txt 1.txt 2.txt
put 1
get 1
move 2
Explicação
-
FNR==NR{a[$1];next}: ao processarfile1.txt, marcamos a ocorrência de$1na matriz associativaa. -
($1 in a){++a[$1]}: ao processar1.txte2.txt, verificamos se$1existe no array associativoa, se sim, aumentando a contagem em 1. - Finalmente, percorra a matriz associativa
a, imprima a chave (primeiro campo nos arquivos) e seu valor (número de ocorrências em1.txte2.txt).
Aqui está outra solução em perl , com a mesma lógica:
$ perl -alne '++$i;
if ($. == $i) {
$h{$F[0]}=0;
close ARGV if eof;
next;
}
++$h{$F[0]} if defined $h{$F[0]};
END {
for (keys %h) {
print $_." ".$h{$_};
}
}' file1.txt 1.txt 2.txt
move 2
get 1
put 1