greip日志记录productId并按productId分组结果?

时间:2016-11-12 01:23:28

标签: bash command-line grep

我对grep或类似命令的一些较为方面的方面不太熟悉,但这正是我试图做的。

我有一个应用程序日志,我已经grepped并将结果写入文件。 (针对特定错误而言)。

现在我想通过productId grep这个新文件(每个错误消息有一个productId,但错误消息的其他内容有所不同),并将productId与一个#分组,表示产品ID的次数出现在日志中。

实施例 经度:

[ERROR] Some class, error info..., for request 13143, with productId=1AHREA4315, location=4314131, timestamp=1431314143141
[ERROR] other class, other error..., for request 13145, with productId=ATAC15414319, location=431531, timestamp=14314314151
... (thousands of errors, many for the same productId)

示例所需输出:(productId,count)

1AHREA4315 134 
ATAC15414319 2341
431AREAB341 3

等。

不必非常漂亮,我只是想获取有关productId导致问题的数据以及哪些产品比其他产品更多的数据。

1 个答案:

答案 0 :(得分:1)

假设产品ID上没有空格,以下内容适用于许多Bash版本:

#!/bin/bash

#Assuming that Product IDs do not have a blank space
grep -o -P 'productId=.*? ' /folder/file > /tmp/pid-holder

#cleaning up everything but the product id value
sed 's/^..........//' /tmp/pid-holder > /tmp/pid-holder2 && sed 's/..$//' /tmp/pid-holder2 > /tmp/pid-holder3

#counting and storing result on a file
sort /tmp/pid-holder3 | uniq -c > /tmp/result

exit 0

结果将存储在文件/ tmp / result