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$1
na matriz associativaa
. -
($1 in a){++a[$1]}
: ao processar1.txt
e2.txt
, verificamos se$1
existe 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.txt
e2.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