Linux 计算整个文件中子字符串的出现次数

Linux 计算整个文件中子字符串的出现次数,linux,shell,awk,Linux,Shell,Awk,例如,我有一个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 UpdateSc

例如,我有一个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)ends、GetData(100)或GetData(1000)。其他功能也是如此


我想得到每个函数的总计数,因此GetData(2)和GetData(100)应作为同一类型的GetData进行计数。

类似的情况如何

$ awk -F"(" '{count[$1]++} END{for ( i in count) print i": "count[i]}' input
UpdateScreen: 2
GetData: 4
printf: 2
它的作用是什么?

  • -F”(“
    将字段分隔符设置为

  • count[$1]+
    创建一个数组
    count
    按第1列索引,
    $1
    函数名

  • for(i in count)print i:“count[i]}
    打印数组的内容

  • grep…-获取函数名
  • sort | uniq-c-计算眼压
  • sort-nr-对发生的事件进行排序

  • 我想获得$1的子字符串(例如FunctionName+'('),并获取其出现次数,如何实现?原因是:“()中的文本是动态的,这意味着对同一个GetData的调用可能会留下不同的日志,例如GetData(5)ends、GetData(100)或GetData(1000)。这对其他函数也是一样的。”@Steve你的意思是对GetData(5)GetData(100)进行单独计数以此类推或整个GetData的单个计数我想得到GetData和所有其他函数的单个计数,所以我需要将函数名从$1中分割出来,并搜索整个文件,而不是直接使用$1。如何做到这一点?@Steve抱歉,我没有弄清楚。答案是我想得到每个函数的总计数,因此GetData(2)和GetData(100)应算作同一类型的GetData,对吗?如果不是,请提供一个例子?对不起,我没有注意到“-F”部分(“”。你说得对,我会接受你的答案:-)
    grep -oP '^\w+' input | sort | uniq -c | sort -nr > output.txt