NT3*_*3RP 9 linux diff command-line
我想比较两个文本文件。通常,我可以diff用来比较两个文件以查看差异。这很好,只是我更关心两个文件的百分比差异。
例如:
File A:
banana
TESTING
File B:
TESTING
Run Code Online (Sandbox Code Playgroud)
在这种情况下,结果将是 50% 的差异。我查看了wdiff,它主要是有效的,除了它逐字查看元素(实际上,我可以通过执行 得到上面的结果wdiff -s filea fileb)。
是否存在提供按字符/按字节级别的文件百分比差异的工具?
小智 7
对两个文本文件进行逐字符比较实际上是一种Levenshtein 距离计算。Linux 中没有一个通用的独立程序可以执行此计算,但是有一些库函数(我知道 PHP 有一个)和大量在线示例代码用于此计算。
另一个小警告是,Levenshtein 距离严格地是两个字符串之间变化的数量,因此如果您正在寻找百分比,则需要对计算出的距离进行归一化。除以两个字符串的长度(文本文件的大小)的平均值是一种广泛使用的规范化。
我对两组转录文件也遇到了类似的问题,我按照投票最多的答案中的建议使用了 Levenshtein 距离,但发现使用 python 是更好的选择。
pip install python-Levenshtein
Run Code Online (Sandbox Code Playgroud)
代码如下:
import sys
from Levenshtein import *
txt1 = open(sys.argv[1]).read()
txt2 = open(sys.argv[2]).read()
print("distance:", distance(txt1,txt2))
Run Code Online (Sandbox Code Playgroud)
使用:
python distance.py file1 file2
Run Code Online (Sandbox Code Playgroud)
尝试将输出 if diff 通过管道传输到wc命令。有多种选择,但-l可能会给您提供适当的更改行数计数。由于 diff 在行之前和之后输出以及其他一些格式,因此您可能必须将结果除以该因子,然后将其放在行中整个文件长度的结果上。wc -l