2011-12-08 6 views
2

これをスクリプト化しようとしていますが、質問が間違っているか、洗練された例が見つからないようです。長いファイルから短いファイルを差し引いたものと同じファイルを新しいファイルと同じ行に変更する

私はリストを持つ2つのファイルを取っています。

file1

aa 
bb 
cc 
dd 
ee 
ff 

file2

bb 
dd 
ff 

file3 = file1線の作成 - (file1の任意の時点で、file2の行に一致する)

file3

aa 
cc 
ee 

ありがとうございました。それはファイルを頼るOKであれば

答えて

1

することは、あなたはこれを使用することができます:

comm -2 -3 <(sort file1) <(sort file2) 

を私はあなたが欲しいものを記述するための雄弁な方法は、相対的な補完や設定の違いだと思います。実際、wikipedia pageには、上記の私のソリューションを含め、多くの言語でのコード例があり、インラインソートに対応していません。

+0

謝罪。私は先週これを試して、その中にもっと多くの行があるファイルで終わった。だから、私は 'comm -2 -3 <(ソート・スモール・ファイル)<(ソート・ラージ・ファイル)'と 'comm -2 -3 <(ソート・ラージ・ファイル)<(ソート・スモール・ファイル)'の両方の方法で試しました。 。私は今日wikiを使ってやり直します。ありがとう –

+0

これはあなたのために動作しない場合、多分私はあなたが何を求めているか理解していないと言う必要があります。私は100%にかなり近く、2つのファイルの差異を計算していると確信しています。 – frankc

1

file2からすべての行をfile1で、それはかなり簡単ですが発生した場合:

sort file1 file2 | uniq -u 

ファイルをソートすることができず、上記の条件は、(ほぼすべてのライン)が真であるかどうかわからない、awkことができる場合

awk 'BEGIN { while ((getline line < "file2" > 0) { 
        f2[line]++ 
      } 
      } 
    f2[$0] > 0 { print }' file1 

:私は本当に大きなfile2でそれを使用することはありません。このようにそれを行います。

+0

は本当に大きいですか?私のリストはあまりにも22K行を持っている、ファイルサイズはわずか418キロバイトです。 –

+0

私はソートを試みましたが、ファイル内の行数が増えてしまいました。基本的にfile1-file2が必要です。 yes file2のすべての行はfile1になければなりません。御時間ありがとうございます。 –

+0

本当に大きい私はギガバイトを意味した... –

3

どのように後半応答では約

fgrep -v -f file2 file1 
関連する問題