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

时间:2012-04-30 07:10:28

标签: 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

4 个答案:

答案 0 :(得分:33)

A.TXT:

1;john;125;3
1;tom;56;2
2;jack;10;5

b.txt:

1;john;125;3
1;tom;58;2
2;jack;10;5

使用comm

comm -13 a.txt b.txt 
1;tom;58;2

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

  

-1抑制第1列(FILE1特有的行)

     

-2抑制第2列(FILE2独有的行)

     

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

答案 1 :(得分:10)

假设您只想保留文件2的唯一行,您可以这样做:

comm -13 file1 file2

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

答案 2 :(得分:4)

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

diff --changed-group-format="%>" --unchanged-group-format="" file1 file2

答案 3 :(得分:1)

以下是我认为比diff更好的简单解决方案:

sort file1 file2 | uniq -u

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