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

Unix grep多个文件获取唯一剪切的计数,unix,grep,Unix,Grep,我想我已经接近这一点了,看到了类似的问题,但没能让它按我所希望的那样工作。因此,我有几个日志文件,我想按日期统计几个不同服务调用的发生次数 首先,我尝试了下面的方法,剪切只是为了获得第一个元素(日期)和第11个元素(服务调用的名称),这是特定于我的日志文件的: grep -E "invoking webservice" *.log* | cut -d ' ' -f1 -f11 | sort | uniq -c 但这返回了如下结果: 5 log_1.log:2017-12-05 getLegs

我想我已经接近这一点了,看到了类似的问题,但没能让它按我所希望的那样工作。因此,我有几个日志文件,我想按日期统计几个不同服务调用的发生次数

首先,我尝试了下面的方法,剪切只是为了获得第一个元素(日期)和第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

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

您的问题似乎是
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

哈哈,很简单,谢谢。需要仔细阅读文档。谢谢