从压缩文件Unix中获取Grep数据

时间:2017-04-24 13:57:40

标签: unix grep

我有一个数据管道分开的文件,我希望在两次之间获得一个grep文本。以下是文件结构

2017-04-23 06:43:00|1|2|3|4|5|TEST|
2017-04-23 06:43:01|1|2|3|4|5|TEST|
2017-04-23 06:43:02|1|2|3|4|5|A|
2017-04-23 06:44:00|1|2|3|4|5|TEST|

现在我想计算06:43:0006:44:00之间TEST的出现次数。我厌倦了使用grep

zgrep -a "06:43:00" filename.gz | grep "TEST" | wc -l

但我无法在上述两次之间得到计数。

2 个答案:

答案 0 :(得分:1)

使用表达式grep(egrep)来grep多个模式

zegrep '06:43|06:44:00' filename.gz | grep TEST | wc -l

zcat filename.gz | egrep '06:43|06:44:00' | grep TEST | wc -l

$ zcat file1.gz | egrep '06:43|06:44:00' | grep TEST
2017-04-23 06:43:00|1|2|3|4|5|TEST|
2017-04-23 06:43:01|1|2|3|4|5|TEST|
2017-04-23 06:44:00|1|2|3|4|5|TEST|

$ zcat file1.gz | egrep '06:43|06:44:00' | grep TEST | wc -l
3

或非常hacky:

  zcat file1.gz | perl -ne 'if(/06:43:00/){$p=1;}if($p){print $_;}if(/06:44:00/){$p=0;}' | grep TEST | wc -l    3

答案 1 :(得分:0)

zcat filename.gz \
    | awk '/06:43/,/06:44/ { print }' - \
    | grep TEST | wc -l

awk usually uses /<pattern>/ { <action> }, but it is also possible to define a range with two comma separated patterns. /<start-pattern>/,/<end-pattern/ { <action> }