ファイルセットの違いを経験的に発見

ファイルセットの違いを経験的に発見

テストスイートを繰り返し実行して生成された多数の出力ファイルがあり、それらがどれだけ異なるかをおおよそ知りたいと思います。理想的には、すべて同じであるか(テストが完全に反復可能であることを示す)、ほぼ同じでなければなりません(たとえば、タイムスタンプがある場合など)。だから私は次のスクリプトを探しています。

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返される行数を確認することです。数値が現在の最大数より大きい場合、ファイル名が保存されます。

関連情報