Como fazer uma diferença insensível à linha (diff) no linux?

0

Eu tenho dois arquivos de texto em que a ordem das linhas não importa. Eu quero descobrir as linhas que são diferentes em um arquivo para o outro. Usar o diff no linux encontra a diferença, mas também explica a mudança nas linhas do mesmo texto.

Em outras palavras, Como faço uma diferença insensível à linha?

    
por pnkjmndhl 10.10.2018 / 16:50

2 respostas

5

Se os seus arquivos não forem muito grandes, você poderá sort deles antes de diff ing.

Então, algo assim funcionaria:

sort file1 > file1_sorted
sort file2 > file2_sorted
diff file1_sorted file2_sorted

Ou, como você descobriu nos comentários, você também pode fazer isso em uma linha,

diff <(sort file1) <(sort file2)
    
por 10.10.2018 / 17:08
2

Semelhante às opções diff , você pode usar o comando comm com as substituições do processo e sort ( comm requer que os arquivos em que opera sejam ordenados). Isso permitiria que você se concentrasse apenas nas linhas comuns, apenas nas linhas que estão em um arquivo ou outro usando -1 para suprimir linhas somente no primeiro arquivo, -2 para suprimir linhas somente no segundo arquivo ou -3 para suprimir linhas em ambos, para ver todas as linhas que estão apenas no primeiro arquivo e não no segundo que você poderia fazer

comm -23 <(sort file1) <(sort file2)

claro, se você quiser, considere também usar grep like

grep -vFxf file2 file1

que tratará as linhas em file2 como padrões e imprimirá somente as linhas do arquivo1 que não tiverem correspondências ( -v ) ao tratar as linhas de ( -f ) file2 como sequências fixas ( -F ) que deve corresponder à linha inteira ( -x ).

A solução grep tem a vantagem de não precisar classificar os arquivos, mas verifica apenas as linhas em um dos arquivos que não estão no outro, não em ambas as direções ao mesmo tempo.

    
por 10.10.2018 / 20:40

Tags