例如,我有一个文件log.txt,内容可能是
GetData() starts 2014-11-30 17:05
GetData(100) ends 2014-11-30 17:05
printf("") starts 2014-11-30 17:05
printf() ends 2014-11-30 17:06
UpdateScreen(xxx) starts 2014-11-30 17:06
UpdateScreen(xx) end 2014-11-30 17:06
GetData() starts 2014-11-30 17:06
GetData(100) ends 2014-11-30 17:06
对于每个函数名,我想计算整个文件中的出现次数,并将统计信息输出到output.txt。
output:
GetData: 4
Printf: 2
UpdateScreen: 2
如何通过像awk这样的linux shell命令来做到这一点?
更新
()中的文本是传递给函数的参数,因此它们是动态的,这意味着对同一GetData的调用可能会留下不同的日志,例如GetData(5)end,或GetData(100)或GetData( 1000)。这也与其他功能相同。
我想获得每个函数的总计数,因此GetData(2)和GetData(100)将被视为相同类型的GetData。
答案 0 :(得分:3)
像
这样的东西$ awk -F"(" '{count[$1]++} END{for ( i in count) print i": "count[i]}' input
UpdateScreen: 2
GetData: 4
printf: 2
它的作用是什么?
-F"("
将字段分隔符设置为(
count[$1]++
创建一个由第1列索引的数组count
,$1
函数名称
for ( i in count) print i": "count[i]}
打印数组的内容
答案 1 :(得分:0)
grep -oP '^\w+' input | sort | uniq -c | sort -nr > output.txt