4

このようなファイルがあります。

10gs+VWW+A+210 10gs-ASN-A-206 0.616667 0.094872
10gs+VWW+A+210 10gs-GLU-A-31- 0.363077 0.151282
10gs+VWW+A+210 10gs-GLY-A-207 0.602564 0.060256
10gs+VWW+A+210 10gs-LEU-A-132 0.378151 0.288462
10gs+VWW+A+210 10gs-LEU-A-60- 0.376812 0.133333
10gs+VWW+A+210 11ba-GLU-A-2-z 0.333333 0.065385
10gs+VWW+A+210 11ba-SER-A-15- 0.400000 0.053846
10gs+VWW+A+210 11ba-GLU-A-2-z 0.333333 0.065385
10gs+VWW+A+210 11ba-SER-A-15- 0.400000 0.053846
17gs+VWW+A+210 11ba-SER-A-77- 0.415789 0.101282
15gs+VWW+A+210 11ba-VAL-A-47- 0.413793 0.215385

パターンに一致する行を検索したい[空白を含む]。パターンが「10gs+VWW+A+210 11ba-」であるとしましょう。

このようなパターンを grep の引数として与えると、一致する行が正しく取得されます。pattern.txtただし、各行にこれらすべてのパターンのリストがあるファイルから、これらのような複数のパターンを一致させたい場合に問題が発生します。

pattern.txt次のようになります。

10gs+VWW+A+210 11ba-

10gs+VWW+A+210 10gs-

次のようなシェルスクリプトを使用すると:

for i in `cat pattern.txt`; do grep -e "^$i" bigfile.txt ; done

コマンドは10gs+VWW+A+210、一致するように個別に 11ba を個別に取得します。2 つの文字列を別々にではなく、10gs+VWW+A+210 11ba というように全体を (スペースで区切って) 一致させたいと考えています。

検索文字列の空白文字を克服するために既存のシェル スクリプトを変更するにはどうすればよいですか?

また、これらの文字列セットを照合するファイルが大きいため、最大 50 GB です。したがって、メモリ効率の高いソリューションは大歓迎です。ありがとう。

4

2 に答える 2

1

スペースを他の記号に置き換える

#パターンに決して発生しないと仮定する

 for i in $( cat pattern.txt | tr ' ' '#' ) ; do 
            j=$(echo "$i" | tr '#' ' ' ) 
            grep -e "^$j" bigfile.txt 
 done

私のテストファイルのタイミング

real    0m20.739s
user    0m11.773s
sys     0m8.345s

grep で -f フラグを使用する

 grep -f pattern.txt bigfile.txt

同じテスト ファイルでのタイミング

real    0m2.190s
user    0m2.163s
sys     0m0.026s

つまり、grep -f大きなパターン ファイルを使用すると、 のパフォーマンスが約 10 倍向上するように見えます。

于 2012-06-03T15:22:32.190 に答える
0

次のコマンドと対応する結果はあなたに合っていますか? どちらか一方を一致させるには、パターンをパイプで分割する必要があります。

指示:

egrep '10gs\+VWW\+A\+210 11ba-|10gs\+VWW\+A\+210 10gs-' bigfile.txt

結果:

10gs+VWW+A+210 10gs-ASN-A-206 0.616667 0.094872
10gs+VWW+A+210 10gs-GLU-A-31- 0.363077 0.151282
10gs+VWW+A+210 10gs-GLY-A-207 0.602564 0.060256
10gs+VWW+A+210 10gs-LEU-A-132 0.378151 0.288462
10gs+VWW+A+210 10gs-LEU-A-60- 0.376812 0.133333
10gs+VWW+A+210 11ba-GLU-A-2-z 0.333333 0.065385
10gs+VWW+A+210 11ba-SER-A-15- 0.400000 0.053846
10gs+VWW+A+210 11ba-GLU-A-2-z 0.333333 0.065385
10gs+VWW+A+210 11ba-SER-A-15- 0.400000 0.053846
于 2012-06-03T15:23:36.140 に答える