私は職場でいくつかの報告作業をサポートしてきました。これまでに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
-d
gzip
cat
-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}'