Use comm -12 file1 file2 para obter linhas comuns nos dois arquivos.
Você também pode precisar que seu arquivo seja classificado como comm para funcionar como esperado.
comm -12 <(sort file1) <(sort file2)
Em man comm :
-1 suppress column 1 (lines unique to FILE1)
-2 suppress column 2 (lines unique to FILE2)
Ou usando o comando grep você precisa adicionar a opção -x para corresponder à linha inteira como um padrão correspondente. A opção F informa a grep que corresponde ao padrão como uma string que não é uma correspondência de expressão regular.
grep -Fxf file1 file2
Ou usando awk .
awk 'NR==FNR{seen[$0]=1; next} seen[$0]' file1 file2
Isto está lendo toda a linha de arquivo1 em uma matriz chamada seen com a chave como linha inteira (em awk o $0 representa toda a linha atual).
Usamos NR==FNR como condição para executar seu bloco seguido apenas para a primeira entrada fle1 não arquivo2 , porque NR em awk se refere ao processamento atual número da linha e FNR estão se referindo ao número da linha atual em todas as entradas . então NR é exclusivo para cada arquivo de entrada, mas FNR é exclusivo para todas as entradas.
O next está informando que awk não continua o código de descanso e começa novamente até NR não ser igual a FNR , o que significa que todas as linhas de arquivo1 são lidas por awk .
Em seguida, o próximo seen[$0] será executado apenas para o segundo arquivo2 e para cada linha em arquivo2 irá procurar na matriz e imprimirá a linha onde ela existir no array .
Outra opção simples é usar sort e uniq :
sort file1 file2|uniq -d
Isso imprimirá os dois arquivos classificados, então uniq -d imprimirá apenas as linhas duplicadas. MAS isso é concedido quando NÃO há linhas duplicadas em ambos os arquivos, senão sempre é concedido mesmo que haja linhas duplicadas nos dois arquivos.
uniq -d <(sort <(sort -u file1) <(sort -u file2))