Linuxで行に依存しない差分(diff)を行う方法は?


0

行の順序が関係ない2つのテキストファイルがあります。あるファイルと別のファイルで異なる行を見つけたいです。Linuxでdiffを使用すると違いがわかりますが、同じテキストの行の変更も考慮されます。

言い換えれば、どのように行に依存しない違いをするのですか?

回答:


5

ファイルが大きすぎない場合は、実行sortする前にファイルを削除できますdiff

したがって、次のように動作します。

sort file1 > file1_sorted
sort file2 > file2_sorted
diff file1_sorted file2_sorted

または、コメントでわかったように、1行で行うこともできます。

diff <(sort file1) <(sort file2)

2

diffオプションと同様に、commプロセスを置換してコマンドを使用できますsortcomm操作するファイルをソートする必要があります)。これにより-1、最初のファイルの-2行のみ-3を抑制したり、2番目のファイルの行のみを抑制したり、両方の行を抑制したりすることで、共通の行、一方のファイルまたは他方のファイルの行のみに焦点を当てることができます。最初のファイルのみにあり、2番目のファイルにはないすべての行を表示します

comm -23 <(sort file1) <(sort file2)

もちろん、必要であれば、次のgrepように使用することも検討できます。

grep -vFxf file2 file1

行を扱うなるfile2パターンとしてしかない一致を持たないFILE1からの行を印刷(-v)からライン(治療する場合-ffile2固定文字列として(-F全体の行に一致しなければなりません)( -x)。

このgrepソリューションには、ファイルを並べ替える必要がないという利点がありますが、一方のファイルの行だけをチェックし、もう一方のファイルの行はチェックせず、一度に両方向の行をチェックしません。


ソートされたファイルがcomm必要であることを強調します。(はい、あなたは間接的にそれを言及しますが、あなたがそれを表現した方法を見落とすのは簡単です)。また、このシナリオでは、よりもはるかに効率的です。あれば解決策は簡単にメモリ不足になる可能性が(DFAにNFAを変換するときの指数爆発)が大きく、我々はない長い前にこのについての質問がありました。commdiffgrepfile2
dirkt
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.