我想我已经接近了,并且看到了类似的问题,但无法让它按照我的意愿运作。所以,我有几个日志文件,我想按日期计算几个不同的服务调用的出现次数。
首先我尝试了下面的内容,剪切只是为了获取第一个元素(日期)和第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
我做错了什么?一如既往,非常感谢!
答案 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