Linux 如何使用diff(bash)仅显示不同的行

Linux 如何使用diff(bash)仅显示不同的行,linux,bash,unix,diff,Linux,Bash,Unix,Diff,如何在单独的文件中使用diff仅显示不同的行 例如,文件编号1包含以下行: 1;john;125;3 1;tom;56;2 2;jack;10;5 文件编号2包含以下行: 1;john;125;3 1;tom;58;2 2;jack;10;5 如何使以下情况发生 1;tom;58;2 a、 txt: b、 txt: 1;john;125;3 1;tom;58;2 2;jack;10;5 使用: comm的命令行选项非常简单: -1禁止显示第1列(文件1特有的行) -2抑制第2列(文件2特

如何在单独的文件中使用diff仅显示不同的行

例如,文件编号1包含以下行:

1;john;125;3
1;tom;56;2
2;jack;10;5
文件编号2包含以下行:

1;john;125;3
1;tom;58;2
2;jack;10;5
如何使以下情况发生

1;tom;58;2
a、 txt:

b、 txt:

1;john;125;3
1;tom;58;2
2;jack;10;5
使用:

comm
的命令行选项非常简单:

-1禁止显示第1列(文件1特有的行)

-2抑制第2列(文件2特有的行)

-3抑制第3列(两个文件中出现的行)


假设只保留文件2独有的行,可以执行以下操作:

comm -13 file1 file2

请注意,
comm
命令要求两个文件按顺序排序

使用组格式说明符,您可以禁止打印未更改的行,并仅打印更改行的更改行


diff--changed group format=“%%>”--unchanged group format=“”file1 file2

我认为这是一个比
diff
更好的简单解决方案:

sort file1 file2 | uniq-u

  • 排序文件1文件2
    连接两个文件并对其排序
  • uniq-u
    打印唯一的行(不重复)。它要求对输入进行预排序

是的,注意到了-我假设第一个文件具有优先级。更新了帖子“注意comm命令要求两个文件按顺序排序”。还注意comm并不意味着
uniq
,因此,如果一行在file1中出现多次,而在file2中仅出现一次,file1中的每一次额外出现都将被
comm
列为差异(当然是…).对于
1,应如何处理;汤姆;56;2
?第二个文件是否应始终具有优先级?如果第一个文件包含的行不在第二个文件中,该怎么办?这对于使用低估答案的字符串也非常有效!简单而优雅,处理排序问题,并使用命名无可挑剔的uniq实用程序
comm -13 a.txt b.txt 
1;tom;58;2
comm -13 file1 file2