GNU/Linux >> Linux の 問題 >  >> Linux

別のファイルにない1つのファイルの行を取得するためのツール?

ファイル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

Linux
  1. 組み込みコマンドとそうでないコマンドの違いは?

  2. ディレクトリのコンテンツのMd5合計を1つの合計として取得するにはどうすればよいですか?

  3. Fortigate-VMでは利用できないRackspaceCloudServerの機能

  1. ファイルの行をコマンドの引数として使用するにはどうすればよいですか?

  2. ファイルの内容を別のファイルに挿入する (送信されたファイルの特定の行に) - BASH/LINUX

  3. ファイル内の行の順序を変更する

  1. 「jobs:NotFound」というエラーメッセージが表示されるのはいつですか。

  2. ファイル B に表示される行を別のファイル A から削除するには?

  3. ファイルに文字列を含む行を取得するには?