Use a linha de comando grep
da seguinte forma:
grep -Fx -f file1 file2
Qual é a maneira mais eficiente de obter a interseção entre dois arquivos:
sort file1 file2 | uniq -d
Use a linha de comando grep
da seguinte forma:
grep -Fx -f file1 file2
Se você quiser combinar o conteúdo de dois arquivos, execute o comando abaixo,
awk 'NR==FNR' file1 file2
Deixa o arquivo1 = 'A \ nA' e o arquivo2 = 'A \ nA \ nA'. A interseção é apenas 'A' ou 'A \ nA'? Em outras palavras, é o número de vezes que a mesma linha é exibida em ambos os arquivos relevantes?
Se for apenas "A", isso funcionará:
sort <(sort file1 | uniq) <(sort file2 | uniq) | uniq -d
O problema com a abordagem dada na questão é que, mesmo que não exista uma linha em ambos os arquivos, se ela for repetida em um, ela aparecerá no resultado. Portanto, precisamos remover as repetições nos arquivos primeiro usando sort fileX | uniq
.
Se for 'A \ nA', isso funcionará:
sort <(sort file1 | awk '{if ($0 == prev) c++; else c=0; print c, $0; prev = $0;}') <(sort file2 | awk '{if ($0 == prev) c++; else c=0; print c, $0; prev = $0;}') | uniq -d | cut -d' ' -f2-
Eu posso pensar em mais alguns liners (com awk, sort, uniq e cut) mas nenhum deles é muito mais simples que isso. Isso, claro, não significa que não haja soluções mais simples.