我有大量由重复运行测试套件产生的输出文件,我想大致了解它们有多大不同。理想情况下,它们应该完全相同(表示完全可重复的测试)或几乎相同(例如,如果存在时间戳)。所以我正在寻找一个像这样的脚本:
show-greatest-diff /path/to/files/*.out
Run Code Online (Sandbox Code Playgroud)
因此,如果存在 100 个 *.out 文件,脚本应该将diff它们全部相互对立,并可能产生其中任何对不同的最大行数/字符数(并可能识别最不同的对),或者只是打印diff输出对差异最大或产生一些其他启发式有用的输出。
由于文件数量众多,此处建议的解决方案不适合我的用例。
怎么样的东西
mostdifs=-1;
for f1 in path/to/files/*.out; do
for f2 in path/to/files/*.out; do
difs=$(diff "$f1" "$f2" | wc -l);
[ "$difs" -gt "$mostdifs" ] && mostdifs=$difs && mostdif="$f1 : $f2";
done
done
echo "$mostdif"
Run Code Online (Sandbox Code Playgroud)
这非常简单,您可以通过测试与其他各种调整$f1文件是否相同来改进它,$f2但是如果我们谈论几百个文本文件,它将在几秒钟内运行,因此额外的复杂性可能不值得。
这个想法是diff在每对文件上运行并查看返回的行数。如果该数字大于当前最大值,则保存文件名。