计算连续行上特定字符串的数量

时间:2017-01-31 19:02:41

标签: bash shell tcl sh

我对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,期望和类似的脚本语言。

3 个答案:

答案 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