2つのファイルの値を比較したいのですが、場所や順序に基づいていません。

2つのファイルの値を比較したいのですが、場所や順序に基づいていません。

次の内容を含む2つのファイルがあるとします。

$ cat File1.txt
Apple
orange
watermelon
avocado
lime
$ cat File2.txt
orange
Apple
lime 
watermelon
avocado

どちらも同じ値を持つため、デフォルトでは違いはありません。私はdiff次のコマンドを使用しています:

diff File1.txt File2.txt

無効な値によってファイルが異なることを示します。私の場合、違いは表示されません。これを達成する他の方法はありますか?どんな提案でも歓迎します。

ベストアンサー1

ソートされたファイルを比較します。

Bash(またはkshまたはzsh)では、次を使用します。プロセスの交換:

diff <(sort File1.txt) <(sort File2.txt)

簡単に言うと:

sort File1.txt >File1.txt.sorted
sort File1.txt >File2.txt.sorted
diff File1.txt.sorted File2.txt.sorted

ソートされたファイル間の違いをすばやく確認するには、comm役に立ちます。あるファイルの行を直接表示しますが、別のファイルの行は表示しません。

comm -12  <(sort File1.txt) <(sort File2.txt) >common-lines.txt
comm -23  <(sort File1.txt) <(sort File2.txt) >only-in-file-1.txt
comm -13  <(sort File1.txt) <(sort File2.txt) >only-in-file-2.txt

同じファイルで1行が繰り返される場合、上記のコマンドは両方のファイルの繰り返し数が同じであると主張します。治療したい場合

foo
bar
foo

同じ

bar
foo

次に、並べ替え時に重複したアイテムを削除します。sort -u代わりに使用してくださいsort

あるファイルの出力を保存しsort、後で別のファイルを使用できるようにするときにそれらを使用する場合は、両方のファイルを同じロケールでソートする必要があります。これを行うには、おそらくバイト順に並べ替える必要があります。

LC_ALL=C sort File1.txt >File1.txt.sorted

おすすめ記事