0

みんな私はagrepの入力を渡すためにxargsを使用しています.私は以下のようなxargsを使用しています

Script:    
xargs -L 1 -I string echo "RequestId="string | xargs -L 1 -I string zcat FILEB | agrep -dEOE string


Output till "RequestId="string
RequestID=543214324
RequestID=512121221
RequestID=521212121

私の目標は、このリクエスト ID を別のファイル "ファイル B" に agrep することです。このファイルは圧縮されているため、agrep を実行する前に zcat を使用する必要があります...しかし、これを行うと、誤った結果が得られます..agrep で使用する最終的な「文字列」は適切ではありません..これに関する提案は非常に役に立った。

4

1 に答える 1

0

あなたが何を望んでいるのかは完全には明らかではありません。以下を含むファイル FILEA があると仮定します。

543214324
512121221
521212121

そして、次の目的で FILEB.gz を agrep する必要があります。

RequestID=543214324
RequestID=512121221
RequestID=521212121

FILEBB.gz は gzip 圧縮されているためzcat、解凍する必要があります。zgrep は にしかない機能に依存しているため、使用できませんagrep

GNU Parallel を使用すると、次のことができます。

cat FILEA | parallel zcat FILEB.gz \| agrep -dEOE RequestID={}

並行して実行する利点の 1 つは、FILEB.gz が大きすぎてメモリに収まらない場合に、並行して検索が行われるため、検索ごとにディスクから FILEB.gz を読み取る必要がなくなることです。もう 1 つの利点は、最近のコンピューターでほぼ保証されている複数の CPU コアを使用できることです。

GNU Parallel は次の方法で簡単にインストールできます。

wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel
chmod 755 parallel
cp parallel sem

詳細については、GNU Parallel の紹介ビデオをご覧ください: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

于 2012-06-27T14:52:50.607 に答える