我试图过滤日志文件中其他用户调用服务的次数。
我在考虑使用uniq -c,但由于时间戳,几乎所有线路都是独一无二的。我想要的是忽略我不需要的部分线路,只关注服务名称和识别每个单独呼叫的呼叫ID。
日志格式如下:
27/02/2017 00:00:00 [useremail@email.com] [sessioninfo(**callId**)] **serviceName**
将callId和serviceName作为我想要过滤的字符串。
我所需的输出将是与服务调用在同一行中找到的每个不同callId的计数。
例如输入:
27/02/2017 00:00:00 [useremail@email.com] [sessioninfo(12345)] service1
27/02/2017 00:00:01 [useremail1@email.com] [sessioninfo(12346)] service1
27/02/2017 00:00:02 [useremail2@email.com] [sessioninfo(12347)] service1
27/02/2017 00:00:00 [useremail@email.com] [sessioninfo(12345)] service1
输出为3,因为其中一行使用相同的callId。
有什么方法可以用grep实现这个目的,还是我需要创建更高级的脚本来完成这项工作?
答案 0 :(得分:1)
您可以使用以下awk:
awk -F '[\\(\\)\\]]+' '{ print $3 " " $4 }' somelog.log
您可以稍后将其与sort和uniq组合并获取计数:
awk -F '[\\(\\)\\]]+' '{ print $3 " " $4 }' somelog.log | sort | uniq
答案 1 :(得分:1)
我想要的是忽略我不需要的部分。
在您的情况下,您需要的是-f
的 uniq
选项:
-f num Ignore the first num fields in each input line when doing comparisons. A field is a string of non-blank characters separated from adjacent fields by blanks. Field numbers are one based, i.e., the first field is field one.
所以你要sort
日志文件,用uniq -f3
找到唯一的行(折扣前三个字段),然后用wc -l
找到这些行的数量。
即
sort out.log | uniq -f 3 | wc -l