GNU並列処理を使用してgrep検索を強化する

GNU並列処理を使用してgrep検索を強化する

一致しないすべてのパターンを出力するには、次のgrepスクリプトを使用します。

grep -oFf patterns.txt large_strings.txt | grep -vFf - patterns.txt > unmatched_patterns.txt

パターンファイルには、以下の12文字の長さの部分文字列が含まれています(いくつかの例を以下に示します)。

6b6c665d4f44
8b715a5d5f5f
26364d605243
717c8a919aa2

Large_stringsファイルには、約2〜1億文字の非常に長い文字列が含まれています(文字列の小さな部分が下に表示されます)。

121b1f212222212123242223252b36434f5655545351504f4e4e5056616d777d80817d7c7b7a7a7b7c7d7f8997a0a2a2a3a5a5a6a6a6a6a6a7a7babbbcbebebdbcbcbdbdbdbdbcbcbcbcc2c2c2c2c2c2c2c2c4c4c4c3c3c3c2c2c3c3c3c3c3c3c3c3c2c2c1c0bfbfbebdbebebebfbfc0c0c0bfbfbfbebebdbdbdbcbbbbbababbbbbcbdbdbdbebebfbfbfbebdbcbbbbbbbbbcbcbcbcbcbcbcbcbcb8b8b8b7b7b6b6b6b8b8b9babbbbbcbcbbbabab9b9bababbbcbcbcbbbbbababab9b8b7b6b6b6b6b7b7b7b7b7b7b7b7b7b7b6b6b5b5b6b6b7b7b7b7b8b8b9b9b9b9b9b8b7b7b6b5b5b5b5b5b4b4b3b3b3b6b5b4b4b5b7b8babdbebfc1c1c0bfbec1c2c2c2c2c1c0bfbfbebebebebfc0c1c0c0c0bfbfbebebebebebebebebebebebebebdbcbbbbbab9babbbbbcbcbdbdbdbcbcbbbbbbbbbbbabab9b7b6b5b4b4b4b4b3b1aeaca9a7a6a9a9a9aaabacaeafafafafafafafafafb1b2b2b2b2b1b0afacaaa8a7a5a19d9995939191929292919292939291908f8e8e8d8c8b8a8a8a8a878787868482807f7d7c7975716d6b6967676665646261615f5f5e5d5b5a595957575554525

上記のスクリプト(gnuパラレル、xargs、fgrepなど)の速度をどのように高速化できますか? --pipepartと--blockを試しましたが、2つのgrepコマンドをパイプできませんでした。

ちなみに、これらは16進文字列とパターンです。

ベストアンサー1

これは働きます:

parallel --pipepart --block -1 -a large_strings.txt grep -oFf patterns.txt |
  grep -vFf - patterns.txt > unmatched_patterns.txt

使用したことがある場合ripgrep

parallel --pipepart --block -1 -a large_strings.txt rg -oFf patterns.txt |
  rg -vFf - patterns.txt > unmatched_patterns.txt

サイズも大きい場合は、patterns.txt以下を見てください。

https://www.gnu.org/software/parallel/man.html#例: -Grepping-n-lines-for-m-regular-expressions

あなたの状況は、BLATがDNA用に作成されたことを除いて、BLATが解決する問題と非常によく似ています。しかし、あなたの場合、BLATは利用できないようです。一部の変更が必要な場合があります。できる各16進値を2つのDNA文字に変換して直接使用してください。 BLATはデータベース検索と同じくらい高速ですgrephttp://genome.ucsc.edu/FAQ/FAQblat.html#blat3

おすすめ記事