ファイルAに含まれているが、ファイルBには含まれていない行を取得できるツールはありますか? perlなどを使って少し簡単なスクリプトを作成することもできますが、そのようなものがすでに存在する場合は、これから時間を節約します。
承認された回答:
はい。標準のgrep
ファイルでテキスト文字列を検索するためのツールを使用して、あるファイルのすべての行を別のファイルから減算できます。
grep -F -x -v -f fileB fileA
これは、fileBの各行をパターンとして使用することで機能します(-f fileB
)そしてそれを(通常の正規表現ではなく)一致するプレーンな文字列として扱います(-F
)。行全体で一致を強制します(-x
)一致しない行のみを印刷します(-v
)。したがって、fileBのどの行とも同じデータを含まないfileAの行を印刷しています。
このソリューションの欠点は、行の順序が考慮されていないことです。入力の行が異なる場所に重複していると、期待どおりの結果が得られない可能性があります。その解決策は、diff
などの実際の比較ツールを使用することです。 。これを行うには、ファイル内の行の100%にコンテキスト値を持つdiffファイルを作成し、ファイルAをファイルBに変換した場合に削除される行だけを解析します。(このコマンドにも注意してください)正しい行を取得した後、差分フォーマットを削除します。)
diff -U $(wc -l < fileA) fileA fileB | sed -n 's/^-//p' > fileC