2013-03-19 132 views
-2

任何人给我解释一下这个grep命令grep命令解释需要

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

'grep'过滤'.txt'文件中包含字符串'click'的行。这真的是你的问题吗? – 2013-03-19 12:43:47

回答

0

有三个过程在管道:

  1. grep查找包含这个词从日志文件“点击”所有的线路和经过他们到awk
  2. awk使用:分隔符将行分隔成字段。如果第三个字段大于指定的hr且第四个字段大于指定的mins,但它不打印出行,但我没有看到您在设置$hr$min的位置。
  3. 最后,wc对由awk打印的行进行计数。
+0

非常感谢。很好的解释。 – 2013-03-20 05:23:13

1

Grep找到包含字符串click的所有行。这些行传递到awk,它只打印第三个字段大于或等于shell变量$hr,第四个字段大于或等于shell变量$min的行,其中字段分隔符是:(尽管这些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}' 
+0

这就是我需要的 grep“click”localhost_access_log.2013-03-15.txt | awk'{if($ 9!= 301)print $ 0}'| wc -l grep“imp”localhost_access_log.2013-03-15.txt | awk'{if($ 9!= 301)print $ 0}'| wc -l 如果在过去15分钟内条目数大于10,应发送电子邮件。 – 2013-03-19 13:18:08

0

grep "click" /opt/tomcat/logs/localhost_access_log.2013-03-19.txt给定文件

awk -F: '{if (($3 >= $hr) && ($4 >= $min)) print $0}'分割使用来自grep的每个结果的搜索词语click分隔符:。如果第3个元素大于$hr且第4个元素大于$min,请打印第1个元素。

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

因此,看起来好像该命令计算日志文件中有多少行的时间戳大于指定的小时和分钟。