誰でもこのgrepコマンドを説明してください
grep "click" /opt/tomcat/logs/localhost_access_log.2013-03-19.txt \
| awk -F: '{if (($3 >= $hr) && ($4 >= $min)) print $0}' | wc -l
Grep
文字列を含むすべての行を検索しますclick
。これらの行は、3番目のフィールドがシェル変数以上であり、4番目のフィールドがフィールドセパレーターがあるシェル変数awk
以上である行のみを出力するために渡されます(ただし、これらのシェル変数は引用により拡張)。次に、一致数をカウントするために使用されます。現在、パイプラインは、シェル変数が展開されていないために予想される行数を表示しません。$hr
$min
:
wc -l
パイプラインは、次の簡単なスクリプトで置き換える(および修正する)ことができます。awk
$ hr=3
$ min=23
$ awk -F: -v h="$hr" -v m="$min" '/click/ && $3 >= h && $4 >= m{c++}END{print c}'
grep "click" /opt/tomcat/logs/localhost_access_log.2013-03-19.txt
click
指定されたファイルで 単語を検索します
awk -F: '{if (($3 >= $hr) && ($4 >= $min)) print $0}'
セパレータを使用して、grepからの各結果を分割します:
。3番目の要素がより大きい場合$hr
、4番目の要素がより大きい場合は$min
、1番目の要素を印刷します。
wc -l
印刷されたすべての要素を数えます。
したがって、コマンドは、指定された時間と分よりも大きいタイムスタンプを持つログファイルの行数をカウントしているようです。
パイプラインには 3 つのプロセスがあります。
grep
は、ログ ファイルから「クリック」という単語を含むすべての行を検索し、それらを に渡しますawk
。awk
区切り文字を使用して行をフィールドに分割します:
。hr
3 番目のフィールドが指定された値よりも大きく、4 番目のフィールドが指定された値よりも大きい場合、行が出力されますが、 andmins
を設定している場所はわかりません。$hr
$min
wc
によって印刷された行数を数えawk
ます。