%20%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%82%88%E3%81%84%E3%81%A7%E3%81%97%E3%82%87%E3%81%86%E3%81%8B%3F.png)
行の順序が重要でないテキスト ファイルが 2 つあります。一方のファイルともう一方のファイルで異なる行を見つけたいのですが。Linux で diff を使用すると、違いが見つかるだけでなく、同じテキストの行の変更も考慮されます。
つまり、行を区別しない差分をどのように行うのでしょうか?
答え1
ファイルが大きすぎない場合は、するsort
前にそれらを圧縮することができますdiff
。
したがって、次のようなものが機能します。
sort file1 > file1_sorted
sort file2 > file2_sorted
diff file1_sorted file2_sorted
または、コメントで見つけたように、1行で行うこともできます。
diff <(sort file1) <(sort file2)
答え2
オプションと同様に、コマンドをプロセス置換と(操作対象のファイルがソートされている必要があります)とともにdiff
使用できます。これにより、共通行のみ、またはどちらかのファイルにある行のみに焦点を当てることができます。を使用して最初のファイルの行のみを抑制したり、2番目のファイルの行のみを抑制したり、両方の行を抑制したりできます。したがって、最初のファイルのみに含まれ、2番目のファイルには含まれないすべての行を表示するには、次のようにします。comm
sort
comm
-1
-2
-3
comm -23 <(sort file1) <(sort file2)
もちろん、それを望むなら、grep
次のようなものも検討できます
grep -vFxf file2 file1
これにより、 の行がパターンとして扱われ、の行が固定文字列 ( )として扱われ、行全体 ( ) と一致する必要があるときに、 の行がパターンとして扱われfile2
、一致しない file1 の行( ) のみが出力されます。-v
-f
file2
-F
-x
このgrep
ソリューションには、ファイルを並べ替える必要がないという利点がありますが、一度に両方向ではなく、一方のファイルにあるがもう一方のファイルにない行のみをチェックします。