grep多个文件获得唯一剪切的计数

时间:2017-12-09 05:37:39

标签: unix grep

我想我已经接近了,并且看到了类似的问题,但无法让它按照我的意愿运作。所以,我有几个日志文件,我想按日期计算几个不同的服务调用的出现次数。

首先我尝试了下面的内容,剪切只是为了获取第一个元素(日期)和第11个元素(服务调用的名称),这是特定于我的日志文件:

grep -E "invoking webservice" *.log* | cut -d ' ' -f1  -f11 | sort | uniq -c

但这返回的内容如下:

5 log_1.log:2017-12-05 getLegs()  
10 log_1.log:2017-12-05 getArms()  
7 log_2.log:2017-12-05 getLegs()
13 log_2.log:2017-12-04 getLegs()

我真正想要的是:

12 2017-12-05 getLegs()  
10 2017-12-05 getArms()
13 2017-12-04 getLegs()

我已经看过他们首先看猫的例子,但看起来像是同样的问题。

cat * | grep -E "invoking webservice" *.log* | cut -d ' ' -f1  -f11 | sort | uniq -c

我做错了什么?一如既往,非常感谢!

1 个答案:

答案 0 :(得分:2)

您的问题似乎是grep为匹配的行添加了文件名前缀。 (grep在指定多个文件名时会出现此行为,以消除结果的歧义。)您可以将-h传递给grep,以便不打印文件名:

grep -h "invoking webservice" *.log | cut -d ' ' -f1  -f11 | sort | uniq -c

请注意,我删除了-E标记,因为它用于启用扩展的正则表达式支持,而您的示例并不需要它。

或者,您可以使用cat将文件内容转储到标准输出,并将其传递给grep。这样可行,因为它不需要grep的文件名参数:

cat *.log | grep "invoking webservice" | cut -d ' ' -f1  -f11 | sort | uniq -c