Que tal uma abordagem mais simples?
while read line do
grep "^$line$" file2.txt >>matches.txt
done < file1.txt
Explicação:
Isso percorre file1.txt
linha por linha e usa grep
para procurar a linha exata em file2.txt
. Agora, grep
produzirá a linha novamente se conseguir corresponder em file2.txt
e, em seguida, será redirecionada (anexada) ao arquivo matches.txt
.
A razão pela qual seu script está travando é que seu segundo loop está aguardando entrada em stdin
: você esqueceu de tornar sua stdin
uma duplicata do descritor de arquivo 3
como você fez com a primeira. Em qualquer caso, nenhum descritor de arquivo extra precisa ser criado: você pode apenas redirecionar stdin
para que o loop while
seja lido de um arquivo e não do terminal.