2012-01-04 4 views
5

私は2つのnixファイルを持っています。すべてのデータは各ファイルの1行にあります。各値はヌル文字で区切られています。データ一致の値の一部。2つのUnixファイルと出力マッチングラインを新しいファイルと比較しますか?

このデータを、どのようにして一致する値のみを列挙した新しいファイルに解析すればよいですか?

私はsedを使ってヌル文字を改行に変更できますか?そこから私は本当のことを確信していません...

アイデア?

+4

は、値が単一のファイルの中にあり重複していますか?いくつかのサンプルデータが役に立ちます。 –

+1

は、どんな違いがあるか、ファイル内の任意の場所で一致する存在を探していますか? @JohnZwinck氏によると、サンプルデータが役に立ちます。 – Radix

+0

ポジショニングに違いはありません。値が重複している可能性があります。 – rreeves

答えて

12

使用trsortcomm

新しい行にNULL値を変換し、結果を並べ替える:

$ tr '\000' '\n' < file1 | sort > file1.txt 
$ tr '\000' '\n' < file2 | sort > file2.txt 

、両方のファイルに共通する行を取得するためにcommを使用

$ comm -1 -2 file1.txt file2.txt 
<lines shown here are the common lines between file1.txt and file2.txt> 
5

file1またはfile2に重複する値がない場合は、次のようにします。

(tr '\0' '\n' < file1; tr '\0' '\n' < file2) | sort | uniq -c | egrep -v '^ +1' 

これは、2つのファイル間の重複値をすべてカウントします。

フィールドの順序が重要な場合は、あなたがこれを行うことができます:

comm -1 -2 <(tr '\0' '\n' < file1) <(tr '\0' '\n' < file2) 

このアプローチは、それがバッシュの「プロセス置換」機能を必要とし、移植性がありません。

1

これはあなたのために働くかもしれない:

parallel 'tr "\000" "\n" <{} | sort -u' ::: file{1,2} | sort | uniq -d 
関連する問題