0

我有一个日志文件。

有这样的数据:

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(在 Counters 中)的所有唯一 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 

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

4

2 回答 2

0

你不需要使用这么多grepzgrep我们可以在 single中完成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,
于 2018-12-14T00:37:40.483 回答
0

实际上,这行得通。我只是不耐烦了。

zgrep -A 20 "Operation=ABC" * | grep "Hello=0" -B 10 | grep "CustomerId" | uniq -c 
于 2018-12-14T00:18:39.480 回答