我试图找出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