如何在 Linux 命令行中查找 CSV 文件中哪些行不同?

如何在 Linux 命令行中查找 CSV 文件中哪些行不同?

我试图找出file1.csv和之间哪些行不同file2.csv。如果file1.csv看起来像这样:

1,2,3,4
5,6,7,8
9,10,11,12

看起来file2.csv像这样:

1,2,3,4
9,9,9,9
5,6,7,8
9,9,11,12

我可以使用什么命令来拉出这些独特的线条?另外diffcomm、 或grep会是最好的工具吗?

答案1

您可能正在寻找comm

$ comm <(sort file1.csv) <(sort file2.csv)
        1,2,3,4
        5,6,7,8
9,10,11,12
    9,9,11,12
    9,9,9,9

默认情况下,它将仅将第一个文件中存在的行打印为第一列,将同时存在于第二个文件中的行打印为第二列,将仅将第二个文件中存在的行打印为第三列。您可以使用-1,-2-3来隐藏任何这些列。例如:

  • 仅显示两个文件中的内容:

    $ comm -12 <(sort file1.csv) <(sort file2.csv) 
    1,2,3,4
    5,6,7,8
    
  • 仅显示第一个文件中存在的行,但不显示第二个文件中存在的行:

    $ comm -32 <(sort file1.csv) <(sort file2.csv) 
    9,10,11,12
    
  • 仅显示第二个文件中存在的行,但第一个文件中不存在:

    $ comm -31 <(sort file1.csv) <(sort file2.csv) 
    9,9,11,12
    9,9,9,9
    

相关内容