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

fro*_*ops 19 unix linux bash diff

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

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

1;john;125;3
1;tom;56;2
2;jack;10;5
Run Code Online (Sandbox Code Playgroud)

文件号2包含以下行:

1;john;125;3
1;tom;58;2
2;jack;10;5
Run Code Online (Sandbox Code Playgroud)

如何在下面发生?

1;tom;58;2
Run Code Online (Sandbox Code Playgroud)

And*_*ahl 33

A.TXT:

1;john;125;3
1;tom;56;2
2;jack;10;5
Run Code Online (Sandbox Code Playgroud)

b.txt:

1;john;125;3
1;tom;58;2
2;jack;10;5
Run Code Online (Sandbox Code Playgroud)

使用comm:

comm -13 a.txt b.txt 
1;tom;58;2
Run Code Online (Sandbox Code Playgroud)

命令行选项comm非常简单:

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

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

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

  • "请注意,comm命令要求这两个文件按排序顺序排列." (3认同)

cod*_*ict 12

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

comm -13 file1 file2
Run Code Online (Sandbox Code Playgroud)

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


wis*_*cky 11

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

sort file1 file2 | uniq -u

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


mir*_*roB 5

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

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