-2

誰でもこのgrepコマンドを説明してください

grep "click" /opt/tomcat/logs/localhost_access_log.2013-03-19.txt \
  | awk -F: '{if (($3 >= $hr) && ($4 >= $min)) print $0}' | wc -l
4

3 に答える 3

1

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}'
于 2013-03-19T12:48:56.097 に答える
0

grep "click" /opt/tomcat/logs/localhost_access_log.2013-03-19.txtclick指定されたファイルで 単語を検索します

awk -F: '{if (($3 >= $hr) && ($4 >= $min)) print $0}'セパレータを使用して、grepからの各結果を分割します:。3番目の要素がより大きい場合$hr、4番目の要素がより大きい場合は$min、1番目の要素を印刷します。

wc -l印刷されたすべての要素を数えます。

したがって、コマンドは、指定された時間と分よりも大きいタイムスタンプを持つログファイルの行数をカウントしているようです。

于 2013-03-19T12:48:56.143 に答える
0

パイプラインには 3 つのプロセスがあります。

  1. grepは、ログ ファイルから「クリック」という単語を含むすべての行を検索し、それらを に渡しますawk
  2. awk区切り文字を使用して行をフィールドに分割します:hr3 番目のフィールドが指定された値よりも大きく、4 番目のフィールドが指定された値よりも大きい場合、行が出力されますが、 andminsを設定している場所はわかりません。$hr$min
  3. 最後に、wcによって印刷された行数を数えawkます。
于 2013-03-19T12:46:20.433 に答える