我有一个日志文件。
具有这样的数据:
Operation=ABC,
CustomerId=12,
..
..
..
Counters=qwe=1,wer=2,mbn=4,Hello=0,
----
Operation=CQW,
CustomerId=10,
Time=blah,
..
..
Counters=qwe=1,wer=2,mbn=4,Hello=0,jvnf=2,njfs=4
----
Operation=ABC,
CustomerId=12,
Metric=blah
..
..
Counters=qwe=1,wer=2,mbn=4,Hello=1, uisg=2,vieus=3
----
Operation=ABC,
CustomerId=12,
Metric=blah
..
..
Counters=qwe=1,wer=2,mbn=4,Hello:0, uisg=2,vieus=3
----
现在,我想找到所有唯一的CustomerId,其中Operation = ABC和Hello = 0(在Counters中)。
所有这些信息都包含在目录中的.gz文件中。
因此,这就是我试图检索Operation = ABC和“ Hello = 0”出现在其附近的行中的次数。
zgrep -A 20 "Operation=ABC" * | grep "Hello=0" | wc -l
这使我找到Operation = ABC的“ Hello = 0”的次数。 (约250)
为了获得唯一的客户ID,我尝试了以下方法:
zgrep -A 20 "Operation=ABC" * | grep "Hello=0" -B 10 | grep "CustomerId" | uniq -c
这没有给我任何结果。我这是怎么了?
答案 0 :(得分:0)
实际上,这可行。我只是不耐烦。
zgrep -A 20 "Operation=ABC" * | grep "Hello=0" -B 10 | grep "CustomerId" | uniq -c
答案 1 :(得分:0)
您无需使用许多grep
和zgrep
,我们可以在单个awk
中使用它。
awk -F'=' '
/^--/{
if(val==3){
print value
}
val=value=""
}
/Operation=ABC/{
val++
}
/CustomerId/{
if(!a[$NF]++){
val++
}
}
/Hello=0/{
val++
}
{
value=(value?value ORS:"")$0
}
END{
if(val && value){
print value
}
}' <(gzip -dc input_file.gz)
输出如下(仅从示例中测试):
Operation=ABC,
CustomerId=12,
..
..
..
Counters=qwe=1,wer=2,mbn=4,Hello=0,