Apenas faça
grep -vFxf file2 file1 > file3
Isso retornará as linhas que não existem no arquivo2, mas no arquivo1 e grava o resultado no arquivo3.
-
-v
, correspondência reversa, aqui significa que essas linhas existem apenas no arquivo2. Sem-v
, ele retornará as linhas existentes nos dois arquivos. -
-F
, isso indica quegrep
corresponde ao padrão como uma sequência de padrão fixo em vez de regex (expressões regulares) -
-x
, corresponde à linha inteira como string de padrão -
-f
, lendo os padrões de um arquivo
Ou pelo título da sua pergunta e o comando que você referiu a esse sort -u
, parece que você deseja que essas palavras únicas (na verdade, linhas) existam no arquivo1 ou no arquivo2. então você só precisa.
uniq -u <(sort file1 file2) > file3