基于周围行上的其他约束的压缩文件中的值的唯一计数



我有一个日志文件。

有这样的数据:

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

现在,我想查找Operation=ABC和Hello=0(在计数器中(的所有唯一CustomerId。

所有这些信息都包含在目录中的.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 

这没有给我任何结果。我做错了什么?

实际上,这是有效的。我只是不耐烦。

zgrep -A 20 "Operation=ABC" * | grep "Hello=0" -B 10 | grep "CustomerId" | uniq -c 

您不需要使用这么多grepzgrep,我们可以在单个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,

相关内容

  • 没有找到相关文章

最新更新