他のファイルにない限り、ファイルの行をインポートするツールはありますか?

他のファイルにない限り、ファイルの行をインポートするツールはありますか?

ファイルAには含まれているがファイルBには含まれていない行をインポートするためのツールはありますか? Perlなどで簡単なスクリプトを作成できますが、似たようなものがすでに存在する場合は、今から時間を節約します。

ベストアンサー1

はい。ファイルからテキスト文字列を取得するための標準ツールをgrep使用すると、あるファイルのすべての行を別のファイルから減算できます。

grep -F -x -v -f fileB fileA

これは、fileBの各行をパターンとして使用し()、-f fileBそれを一致させる通常の文字列(正規正規表現ではない)として処理することによって-F行われます()。行全体で一致が-x発生するように強制し()、一致しない行のみを印刷します(-v)。したがって、印刷する fileA の行には、fileB の行と同じデータは含まれません。

この解決策の欠点は、行の順序を考慮せず、入力の他の場所に重複行がある場合に期待される結果が得られないことです。解決策は実際の比較ツールです(たとえば、diff.ファイルAをファイルBに変換しています。(このコマンドはフォーマット後に正しい行を得るためにdiffも削除します)。

diff -U $(wc -l < fileA) fileA fileB | sed -n 's/^-//p' > fileC

おすすめ記事