Parece um trabalho para comm
:
$ comm -3 <(sort test1.csv) <(sort test2.csv)
100,300,500,700
100,4,2,1,7
21,22,23,24,25
50,25,700,5
Como explicado em man comm
:
-1 suppress column 1 (lines unique to FILE1)
-2 suppress column 2 (lines unique to FILE2)
-3 suppress column 3 (lines that appear in both files)
Portanto, o -3
significa que apenas as linhas exclusivas de um dos arquivos serão impressas. No entanto, esses são recuados de acordo com o arquivo em que foram encontrados. Para remover a guia, use:
$ comm -3 <(sort test1.csv) <(sort test2.csv) | tr -d '\t'
100,300,500,700
100,4,2,1,7
21,22,23,24,25
50,25,700,5
Nesse caso, você nem precisa classificar os arquivos e pode simplificar os itens acima para:
comm -3 test1.csv test2.csv | tr -d '\t' > difference.csv