【问题标题】:Search pattern occurrence in log file only where other pattern occur仅在其他模式出现的地方搜索日志文件中出现的模式
【发布时间】:2013-02-21 03:21:31
【问题描述】:

现在我使用这个命令来获取一个模式在日志文件中出现的次数。

cat filename.log | grep -c 'myPattern'

问题是我只想知道两三个小时之间发生的事情。其实就是 concat 两种模式识别,一种是选择文本的范围来应用第二种模式识别。

我尝试使用类似的方法但不起作用:

cat filename.log | grep -c 'myPattern' | grep {21:,22:,23:}

我从来不明白当你连接两个或多个管道时通量是如何变化的。

日志文件示例:

20130305-22:31:36 0 0000 pcxvx28p script.ksh               1.10     FIN
20130305-22:36:36 0 0000 pcxvx28p script.ksh               1.10     DEBUT
20130305-22:31:36 0 0000 pcxvx28p script.ksh               1.10     OPERACION BUSQUEDA
20130305-22:36:36 0 0000 pcxvx28p script.ksh               1.10     numero xxx20012

注意:我使用 KornShell (ksh) 提前致谢。

【问题讨论】:

  • 您的日志文件是什么样的?粘贴一些例子。另外,你不需要那个cat
  • 我添加了 3 行日志文件。

标签: regex shell scripting grep ksh


【解决方案1】:

试试

grep -c '^20130305-2[1-3].*myPattern' your.log

日期也应该添加到模式中,因为您的日志可能包含超过一天的数据。

以上行将在21:00 -23:59:59期间计算匹配条目

【讨论】:

  • 您的答案很好,但我需要更准确以使脚本更通用。 grep -c '-2[1-3].:*myPattern' your.log --> 我想做这样的事情,但是 grep 正在抛出错误消息。我想在搜索模式中添加之前的“-”和之后的“:”。
  • @JorgeVegaSánchez 抱歉,我没听懂你在说什么...I want to add in the search pattern the '-' before and the ':' after.你能听懂吗?
【解决方案2】:

不应使用 -c 选项,因为它给出了匹配行数而不是匹配行文本

grep 'myPattern' filename.log | grep '\(21:\)\|\(22:\)\|\(23:\)'

【讨论】:

  • 我尝试了您的命令,但对我不起作用。之后我尝试'cat filename.log' | grep '(21:)\|(22:)\|(23:)' ' 仅显示具有模式 21: 22: 或 23: 但也不起作用的行。
  • 它对我有用。注意我使用的每个括号前的`\`。
  • 但是,如何知道出现的次数,抱歉我忘了写我使用 Korn shell。结果我一无所获。
  • 我正在研究 bash,所以不能说 korn.. 要获得计数,请使用 -c 选项和第二个 grep 而不是第一个。
猜你喜欢
  • 1970-01-01
  • 2011-03-30
  • 1970-01-01
  • 1970-01-01
  • 2020-09-19
  • 2011-08-31
  • 1970-01-01
  • 2023-03-17
  • 2010-11-24
相关资源
最近更新 更多