我对Linux很新,并希望使用shell脚本来计算特定字符串在并发文本行中出现的次数。
例如,我有一个日志,其数据类似于:
rails g model match team:references team:references tourtament:references winner:integer
我想简单地计算包含字符串的并发行数: active node table^M
-------------------^M
pkey vlan master-s/n gateway-s/n gateway-prio if-name gateway name advertised ip
0x7fff 0 N/A 0xa0600 100 if0 DA2WIBL1-25-io 10.126.144.49
0x7fff 0 N/A 0xa0580 100 if0 DA2WIBL1-31-io 10.126.144.51
0x7fff 0 N/A 0xa0400 100 if0 DA2WIBL1-28-io 10.126.144.50
active node table
-------------------
,并将其写入文件。
有没有人知道如何明智地接近这个?我知道一些shell,期望和类似的脚本语言。
答案 0 :(得分:1)
如果你的意思是"连续"通过"并发",然后您通常使用uniq
命令对连续的行进行分组,uniq -c
将它们分组并同时计数:
cat logfile | awk '{print $1}' | uniq -c | grep '0x7fff' | awk '{print $1}'
将logfile的内容指定为:
0x7fff 0 N/A 0xa0600 100 if0 DA2WIBL1-25-io 10.126.144.49
0x7fff 0 N/A 0xa0580 100 if0 DA2WIBL1-31-io 10.126.144.51
0x7fff 0 N/A 0xa0400 100 if0 DA2WIBL1-28-io 10.126.144.50
0x8b5f 0 N/A 0xa0600 100 if0 DA2WIBL1-25-io 10.126.144.49
0x7fff 0 N/A 0xa0400 100 if0 DA2WIBL1-28-io 10.126.144.50
,上面的命令将产生以下输出:
3
1
答案 1 :(得分:0)
grep "0x7fff" logfilename.log | wc -l
上面的代码可以帮助找到模式或字符串valye“0x7fff”出现的行数。
答案 2 :(得分:0)
$ awk -v key='0x7fff' '{if($1==key) c++; else {print c; c=0}}
END {print c}' file
使用@ gudok的样本进行测试
3
1