-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。这些行被传递给awk它只打印第三个字段大于或等于 shell 变量$hr的行,第四个字段大于或等于$min字段分隔符所在的shell 变量:(尽管这些 shell 变量不会是由于引用而扩展)wc -l然后用于计算匹配的数量。目前,由于 shell 变量未扩展,管道不会显示预期的行数。

您的管道可以用一个简单的脚本替换(和修复) :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

管道中有三个过程:

  1. grep从日志文件中查找包含单词“click”的所有行并将它们传递给awk.
  2. awk使用:分隔符将行分成字段。如果第三个字段大于指定hr的并且第四个字段大于指定的,它会打印出该行mins,尽管我看不到您在哪里设置$hrand $min
  3. 最后,wc计算由 打印的行数awk
于 2013-03-19T12:46:20.433 回答
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,则打印第一个元素。

wc -l计算所有打印的元素。

因此,该命令似乎正在计算日志文件中有多少行的时间戳大于指定的小时和分钟。

于 2013-03-19T12:48:56.143 回答