我有大量通过重复运行测试套件生成的输出文件,并且希望大致了解它们有多么不同。理想情况下,它们应该全部相同(表明测试完全可重复)或几乎相同(例如,如果存在时间戳)。所以我正在寻找这样的脚本:
show-greatest-diff /path/to/files/*.out
因此,如果存在 100 个 *.out 文件,脚本应该将diff
它们全部相互对抗,并可能生成其中任何对不同的行/字符的最大数量(并且可能识别最不同的对),或者只打印diff
输出差异最大的对或产生一些其他启发式有用的输出。
建议的解决方案这里由于文件数量较多,不适合我的用例。
答案1
怎么样
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"
这非常简单,您可以通过测试是否$f1
与其他文件相同$f2
以及通过各种其他调整来改进它,但如果我们谈论的是几百个文本文件,它将在几秒钟内运行,因此额外的复杂性可能不值得。
这个想法是在每对文件上运行diff
并查看返回的行数。如果该数字大于当前最大数字,则保存文件名。