数を生成するには、入れ子になったzgrepを設定するのに役立ちます。

数を生成するには、入れ子になったzgrepを設定するのに役立ちます。

私は職場でいくつかの報告作業をサポートしてきました。これまでに2つの別々のコマンドを実行して数を計算できましたが、いくつかの制限のために2つのコマンドを組み合わせる必要がありました。私が実行したものは次のとおりです(無実の人を保護するためにファイル名、ディレクトリ、クエリ名が変更されました)。

コマンド1-_transformer_これらの一意のログエントリをすべてフィルタリングして新しいファイルに書き込みます(私が計算している各プロジェクトにはトランザクションごとに複数のエントリがあるため、次の手順をスピードアップして重複エントリを削除するためにこれを行います)。

zgrep -a _transformer_ /files/are/located/here/logfile_date.gz > \
     /temp/directory/count_file_date.gz

コマンド2- 取引に関連する各項目のインスタンス数を計算します。

zgrep -caE 'shockwave|starscream|megatron|prowl|blaster' \
     /temp/directory/count_file_date.gz

これはうまくいきますが、これを1つのコマンドにまとめて新しいファイルの作成をスキップしたいと思います。私が考えた方法は次のとおりです。しかしそうではありません。

単一コマンド

zgrep -a _transformer_ | \
zgrep -acE 'shockwave|starscream|megatron|prowl|blaster' \
      /files/are/located/here/logfile_date.gz

上記のコマンドを実行すると、以下を含む数だけでなく、パイプ間に単語を含むすべてのログエントリの数が出力されます。変身ロボットログの特定の行にあります。

ベストアンサー1

zgrep -a _transformer_ /files/are/located/here/logfile_date.gz |
  grep -acE 'shockwave|starscream|megatron|prowl|blaster'

最初のzgrep呼び出しはgzip -dcfファイルを生成し、grep -a _transformer_結果ストリームを内部的に実行して別の呼び出しgrepに渡す非圧縮ストリームを生成します。 3つの(gzip、grep、grep)すべてがディスクに中間データを保存せずに同時に実行されます。

次の3つのコマンドを手動で実行することもできます。

gzip -dcf /files/are/located/here/logfile_date.gz |
  grep -a _transformer_ |
  grep -acE 'shockwave|starscream|megatron|prowl|blaster'

((と一緒に使用されている-f場合)は、ファイルが解凍されたかのように動作し、解凍して解凍を生成する代わりにstdoutに結果を出力します。)-c-dgzipcat-d-c/files/are/located/here/logfile_date

grepサポートされている場合は、これを一緒に実行できます-P

gzip -dcf /files/are/located/here/logfile_date.gz |
  grep -acP '^(?=.*_transformer_).*(shockwave|starscream|megatron|prowl|blaster)'

またはポータブルで使用してくださいawk

gzip -dcf /files/are/located/here/logfile_date.gz |
  awk -v n=0 '
    /_transformer/ && /shockwave|starscream|megatron|prowl|blaster/ {n++}
    END {print n}'

おすすめ記事