2016-05-25 8 views
3

zgrep -fを使用して、照会ファイルの各行について、検索される単一のファイル内の最初の一致だけを検索しようとしています。検索対象のファイルが膨大なので(〜3GB)、zgrepが現在のクエリ行に一致するものを見つけたら、検索を停止してから、クエリファイルの次の行でパターンを検索することが重要です。私の問題は、 "zgrep -m 1 -f"はクエリファイルの最初のクエリ行の最初の一致のみを見つけることです。クエリファイル全体の読み込みを停止します。この検索をより効率的に実行する-mと-f(z)grepオプションを組み合わせる他の方法はありますか? (?)ファイル内の各行に最初に一致するzgrep

^dog 
^cat 

そして、私の3百万行から3行には、被検索ファイル(Googleニュース:

は、ここに私の1000行のクエリファイル構造(wordList.txt)から2行です-vectors-negative300.txt.gz)

dog 0.017198 -0.007493 -0.057982 0.054051 -0.028336 
accordion 0.012590 -0.003692 -0.014291 0.057166 -0.025180 
cat 0.004059 0.067190 -0.093874 0.071370 0.038900 

そして、残念ながら、このコマンド:

% zgrep -m 1 -f wordList.txt GoogleNews-vectors-negative300.txt.gz > myVectors.txt 

リターンのみF (「-m 1」なし)は、このコマンドのに対し

dog 0.017198 -0.007493 -0.057982 0.054051 -0.028336 

:最初のクエリのためのIRSTマッチ

% zgrep -f wordList.txt GoogleNews-vectors-negative300.txt.gz > myVectors.txt 

はフル期待される出力を返しますが、それはファイル全体を検索するため、無限に長い時間がかかります毎回:

dog 0.017198 -0.007493 -0.057982 0.054051 -0.028336 
cat 0.004059 0.067190 -0.093874 0.071370 0.038900 

答えて

1

UPDATE:私は単一問合せ「zgrep -m 1」のラッパーとして小さなbashスクリプトを書いてしまったので、私は他のケースの誰かに、以下のことを貼り付けていますが同様のに実行されます問題。短絡の可能性を追加すると、検索が95%向上しました:

#!/bin/sh 
for L in `cat wordList.txt`; do 
    zgrep -m 1 "$L " GoogleNews-vectors-negative300.txt.gz >> myVectors.txt 
done 
関連する問題