diff命令只获取不同行的数量

gmm*_*mmo 16 linux shell ubuntu

我可以使用diff命令找出两个文件是否相差k行?

我不想要上下文差异,只是两个文件之间不同的行总数.如果结果只是一个整数,则效果最佳.

谢谢!

小智 18

diff可以做所有工作的第一部分但不计算; wc -l剩下的就是:

diff -y --suppress-common-lines file1 file2 | wc -l

  • 这是正确的答案,而公认的答案是令人费解且明显错误的。 (4认同)

Zhi*_*Jia 17

是的,你可以,并且以真正的Linux方式,你可以使用多个命令管道来执行任务.

首先,您需要使用diff命令来获取文件中的差异.

diff file1 file2
Run Code Online (Sandbox Code Playgroud)

这将为您提供更改列表的输出.您感兴趣的是前缀为">"符号的行

您可以使用grep工具按如下方式过滤这些内容

diff file1 file2 | grep "^>"
Run Code Online (Sandbox Code Playgroud)

最后,一旦你有了你感兴趣的更改列表,你只需在行模式下使用wc命令来计算更改的数量.

diff file1 file2 | grep "^>" | wc -l
Run Code Online (Sandbox Code Playgroud)

而且你有一个完美的例子,说明了Linux的全部理念.

  • 这不会得到文件 1 中的行,而不是文件 2 中的行,例如,如果文件 1 是“hello”,而文件 2 是一个空白文件,则差异将是“< hello”,因此您的脚本将输出 0,即使文件不同。 (3认同)
  • 这种方法有几个问题:首先,它只会找到`file2`添加的行,而不是`file1`添加的行。第二个问题是,即使用户同时查找了 `<` _ 和 `>`,它也无法清楚地说明哪些行只是 _changed_(哪些 `diff -y` 模型带有 `|` 字符。) (2认同)