2016-03-21 10 views
0

この2つの大きなファイルをunixでどのように比較できますか?unixファイル2(2M数/行/行)、ファイル2(2,000,480個/行/行)の2つのファイルを比較します

私は既に 'grep -Fxvf file1.txt file2.txt | wc -l 'の出力は2,000,480で、file1とfile2を切り替えると出力は1,999,999になります。

「480」の出力を得るには、それが私が期待しているものなので、どうすればいいですか?

また、diff/cmpコマンドを使用してみましたが、出力が複雑すぎます。

皆さん、ありがとうございますか?

ありがとうございました。 Godbless!

+0

なぜあなたは出題しますかctの両方の操作(ファイル1とファイル2の切り替え)が等しい結果を返すかどうかfile2.txtにはfile2にのみ表示され、file1には表示されないより多くのパターンがあるようです。ファイル名の引数を切り替えると、file1にfile2に表示されていないパターンやそのカウントが少ないパターンを検索しようとします。 – sramij

+0

こんにちはsramij、私はちょうどファイル1とファイル2を切り替えてみました。私も自分のやり方で試してみました。下記参照。 ファイル1: リンゴ オレンジ キウイ FILE2: キウイ リンゴ pakwanは、grepの-Fvxf FILE1 FILE2出力がpakwanです。だから、私は上記のシナリオで同じコマンドを使用すると思います。私は出力として「480」を持っています。私は正しい? ありがとうございます! – user2632704

+0

両方のファイルの非メンバーを含めて、それぞれ5-6レコードの2つのファイルを作成します。それを働かせて、それがあなたの大きなファイルで実際に働いていることを確認します。あなたはdiffとcmpについても言及しましたが、 'man comm'はあなたに他のアイデアを示すかもしれません。私が推薦している小さなサンプルファイルでQを編集すると、人々がすぐに手伝ってくれます。また、2つの入力を考慮して期待される出力を示します。がんばろう。 – shellter

答えて

0

2つのファイルの行番号の違いの絶対値が必要だと思います。あなたはawkで簡単に達成することができ、まともな結果を得ることができます。配列内の行数を読み込み、後でENDブロックの配列値を減算します。純粋なシェルの場合、より複雑になるはずです。

$ seq 1 10 > ten 
$ seq 1 14 > fourteen 

そしてあなたは:

$ (wc -l ten ; wc -l fourteen) | awk '{ print $1}' | sort -rn | xargs -J % echo % - p | dc 

結果:

4 

しかしだろうはるかに優れた方法で生成されたいくつかのテストデータ(10および14行のファイル)を取得想像してみて3行で行うだけです(file1の単語数を取得してからfile2を減算してから減算します)

関連する問題