Você ficaria muito melhor se a sua entrada fosse classificada na primeira coluna, desde então você pode usar diretamente o join
comando:
$ cat foo
a 1
b 2
c 3
d 4
$ cat bar
b 1
d 4
e 5
n 2
$ join -t $'\t' <(sort foo) <(sort bar)
b 2 1
d 4 4
Em qualquer caso, eu recomendaria a classificação - sem a classificação, você provavelmente está olhando para O(m*n)
operações, mas com classificação, O(m*log(m) + n*log(n) + min(m,n))
operações - você deve economizar um pouco se otimizar seus métodos em vez do linguagem que você usa.
Com awk
, você pode usar uma única matriz:
awk 'NR==FNR { n[] = ; next } ( in n) {print , n[], }' foo bar
Isso também deve ser razoavelmente rápido, se $i in n
for.