2017-04-24 54 views
0

我有一個數據管道分開的文件,我想在兩次之間得到一個grep文本。以下是文件結構來自壓縮文件的Grep數據Unix

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:00之間的測試的發生,06:44:00。我厭倦了用grep

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

,但我無法得到所提到的2倍計。

+0

難道你只是zgrep 06:43 filename.gz | grep TEST | wc -l –

+0

但我想要的數據從06:43到06:44 – Developer

+0

包括06:44:00? –

回答

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 

或非常哈克:

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 
+0

上爲我工作,它將匹配06:43 | 06:44但我想要的範圍是從06:43:00到6:43:00。我想要在這兩個時間之間的所有值 – Developer

+0

,除非我錯過了它正在做你想要的東西! –

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

AWK通常使用/<pattern>/ { <action> } ,但它也是possi用兩個逗號分隔的模式定義一個範圍。 /<start-pattern>/,/<end-pattern/ { <action> }