次の内容を含む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