【问题标题】:Grep Command Explanation required需要 Grep 命令说明
【发布时间】:2013-03-19 12:41:38
【问题描述】:

谁能解释一下这个 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 过滤掉.txt 文件中包含字符串click 的行。这真的是你的问题吗?

标签: linux bash shell awk grep


【解决方案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}'

【讨论】:

  • 这就是我需要的 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 - 应该发送电子邮件。
【解决方案2】:

管道中有三个进程:

  1. grep 从日志文件中找到所有包含单词“click”的行并将它们传递给awk
  2. awk 使用 : 分隔符将行分成字段。如果第三个字段大于指定的hr 并且第四个字段大于指定的mins,它会打印出该行,尽管我看不到您在哪里设置$hr$min
  3. 最后,wc 统计awk 打印的行数。

【讨论】:

    【解决方案3】:

    grep "click" /opt/tomcat/logs/localhost_access_log.2013-03-19.txt 在给定文件中搜索单词click

    awk -F: '{if (($3 >= $hr) && ($4 >= $min)) print $0}' 使用分隔符 : 从 grep 中拆分每个结果。如果第三个元素大于$hr,第四个元素大于$min,则打印第一个元素。

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

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

    【讨论】:

      猜你喜欢
      • 2015-11-05
      • 1970-01-01
      • 2014-10-08
      • 1970-01-01
      • 2013-10-30
      • 1970-01-01
      • 2012-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多