Eu entendo sua pergunta da maneira que você quer que todas as linhas apareçam em apenas um dos arquivos, não em ambos, e desconsiderando a ordem da linha.
Suponho também que comparamos os arquivos f1.txt
e f2.txt
. Insira seus respectivos nomes.
Usando o Bash, você pode fazer isso com dois loops, onde cada um processa um arquivo e verifica cada linha se ela aparecer no outro. Essa abordagem não é muito eficiente, mas deve funcionar:
# This loops over f1.txt and searches each line in f2.txt
while read line ; do grep -Fxqe "$line" f2.txt || echo "$line" ; done < f1.txt
# This loops over f2.txt and searches each line in f1.txt
while read line ; do grep -Fxqe "$line" f1.txt || echo "$line" ; done < f2.txt
Ambos os loops juntos produzem o resultado desejado. Cada um por si só verifica as linhas em um arquivo que não aparecem no outro.
Uma solução mais simples poderia ser escrita, por ex. com um one-liner curto em Python:
python3 -c 's1=set(open("f1.txt")); s2=set(open("f2.txt")); print(*s1.symmetric_difference(s2), sep="")'
Isso usa uma estrutura de dados Set, que contém apenas valores exclusivos e permite definir operações como "diferença simétrica".
Observe que, ao usar as duas soluções, se algum dos arquivos contiver linhas duplicadas, elas serão ignoradas e tratadas apenas como uma única ocorrência.