我对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导致问题的数据以及哪些产品比其他产品更多的数据。
答案 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
中