![如何在 Linux 命令行中查找 CSV 文件中哪些行不同?](https://linux22.com/image/137015/%E5%A6%82%E4%BD%95%E5%9C%A8%20Linux%20%E5%91%BD%E4%BB%A4%E8%A1%8C%E4%B8%AD%E6%9F%A5%E6%89%BE%20CSV%20%E6%96%87%E4%BB%B6%E4%B8%AD%E5%93%AA%E4%BA%9B%E8%A1%8C%E4%B8%8D%E5%90%8C%EF%BC%9F.png)
我试图找出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
我可以使用什么命令来拉出这些独特的线条?另外diff
,comm
、 或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