如何在linux中解析大文件

如何在linux中解析大文件,linux,bash,awk,Linux,Bash,Awk,我是Linux的初学者。我有以下平面文件test.txt Iteration 1 Telephony Pass/Fail 5.1.1.1 voiceCallPhoneBook 50 45 5.1.1.4 voiceCallPhoneHistory 50 49 5.1.1.7 receiveCall 100 100 5.1.1.8 deleteContacts 20 19 5.1.1.9 addContacts 20 2

我是Linux的初学者。我有以下平面文件test.txt

Iteration 1   
Telephony   


Pass/Fail

5.1.1.1   voiceCallPhoneBook   50   45
5.1.1.4   voiceCallPhoneHistory   50   49
5.1.1.7   receiveCall   100   100
5.1.1.8   deleteContacts   20   19
5.1.1.9   addContacts   20   20
Telephony   16:47:42
Messaging   


Pass/Fail

5.1.2.3   openSMS   50   49
5.1.2.1   smsManuallyEntryOption   50   50
5.1.2.2   smsSelectContactsOption   50   50
Messaging   03:26:31
Email   


Pass/Fail

Email   00:00:48
Email   


Pass/Fail

Email   00:00:40
PIM   


Pass/Fail

5.1.6.1   addAppointment   5   0
5.1.6.2   setAlarm   1   0
5.1.6.3   deleteAppointment   5   0
5.1.6.4   deleteAlarm   1   0
5.1.6.5   addTask   1   0
5.1.6.6   openTask   1   0
5.1.6.7   deleteTask   1   0
PIM   00:03:06
Multi-Media   

teration 2   
Telephony   


Pass/Fail

5.1.1.1   voiceCallPhoneBook   50   47
5.1.1.4   voiceCallPhoneHistory   50   50
5.1.1.7   receiveCall   100   100
5.1.1.8   deleteContacts   20   20
5.1.1.9   addContacts   20   20
Telephony   04:02:05
Messaging   


Pass/Fail

5.1.2.3   openSMS   50   50
5.1.2.1   smsManuallyEntryOption   50   50
5.1.2.2   smsSelectContactsOption   50   50
Messaging   03:20:01
Email   


Pass/Fail

Email   00:00:47
Email   


Pass/Fail

Email   00:00:40
PIM   


Pass/Fail

5.1.6.1   addAppointment   5   5
5.1.6.2   setAlarm   1   1
5.1.6.3   deleteAppointment   5   5
5.1.6.4   deleteAlarm   1   1
5.1.6.5   addTask   1   1
5.1.6.6   openTask   1   1
5.1.6.7   deleteTask   1   1
PIM   00:09:20
Multi-Media   
我想计算文件中特定单词的出现次数,例如:如果我用“voiceCallPhoneBook”搜索,它显示为2次

我可以用

cat reports.txt | grep "5.1.1.4" | cut -d' ' -f1,4,7,10 |
运行此脚本后,我得到如下输出

5.1.1.4 voiceCallPhoneBook  50  45
5.1.1.4 voiceCallPhoneBook  50  47
这是一个非常大的文件,我想利用bash/awk脚本中的循环,并找到第3列和第4列值之和的平均值。我正在努力用bash脚本编写。如果有人能给出解决方案,我们将不胜感激


谢谢

这将搜索包含5.1.1.4的行
对第三列和第四列进行计数
然后把它们全部打印出来

awk '/^5\.?\.?\.?/ {a[$1" " $2] +=$3 ; b[$1" " $2] +=$4 }
END{ for (k in a){
      printf("%-50s%-10i%-10i\n",k,a[k],b[k])}
}' $1
今天早些时候的副本在这里

标题平均值和出现次数,格式更整洁,便于阅读:)

1) 将其保存在文件中,例如countVoiceCall.awk

2) awk-f countVoiceCall.awk sample.txt

输出:

column 3 avg: 50
column 4 avg: 46
简要说明:

a.    BEGIN{...} block uses for variables initialization
b.    /PATTERN/{...}  blocks uses to search your keyword, for example "voiceCallPhoneBook"
c.    END{...} block uses for print the results

到目前为止你写了什么?@4aRk Kn1gh7:嗨,请找到我写的代码awk'{print$4}'report5.txt>temp_file declare-a array while read line do if[${array[“$line”]}];然后数组[“$line”]=$(${array[“$line”]}+1))否则数组[“$line”]=1 fi done\.4。谢谢您的帮助。但我有值5.1.2.1,5.1.4.1,5.1.5.1,5.2.3.1。。。在文件中。在这种情况下,我如何获得计数?由于值为5.1.2.1,5.2.3.1在文件中多次出现(1000次)。唯一的问题是值总是以“5”开头。。请提出建议。总是4个数字吗?@user3749924现在将所有数字的答案都改为打印:)@user3749924您想要什么样的平均值?或特定5.x.x的平均值。x@Hafizhan:谢谢。但是我如何获得多个事件?因为数字5.1.1.4在一个文件中重复了多次(1000次)。如何获取所有1000个实例并求其平均值。如果要显示它们,请将
print$0
添加到
/PATTERN/{…}块
c3=c3+$3
是累加所有第3列的值,这是所有行匹配模式的总和“voiceCallPhoneBook”awk逐行处理您的输入文件,因为我们提供了特定的模式,它将只累加与给定模式匹配的第3列和第4列,无论出现多少次,这有意义吗?
column 3 avg: 50
column 4 avg: 46
a.    BEGIN{...} block uses for variables initialization
b.    /PATTERN/{...}  blocks uses to search your keyword, for example "voiceCallPhoneBook"
c.    END{...} block uses for print the results