我对Linux比较陌生,我想使用shell脚本来计算特定字符串在并发文本行中出现的次数。
例如,我有一个日志,其中的数据类似于:
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
-------------------我想简单地计算包含字符串:'0x7fff'的并发行数,并将其写入一个文件。
有没有人知道如何明智地解决这个问题?我知道一些shell,expect和类似的脚本语言。
发布于 2017-02-01 03:14:38
如果您所说“连续”指的是“并发”,那么通常使用uniq命令对连续的行进行分组,使用uniq -c命令同时对它们进行分组和计数:
cat logfile | awk '{print $1}' | uniq -c | grep '0x7fff' | awk '{print $1}'给定日志文件的内容如下:
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发布于 2017-02-01 03:07:52
grep "0x7fff" logfilename.log | wc -l
上面的代码可以帮助找到模式或字符串valye "0x7fff“出现的行数。
发布于 2017-02-01 03:29:28
$ awk -v key='0x7fff' '{if($1==key) c++; else {print c; c=0}}
END {print c}' file使用@gudok的示例进行测试
3
1 https://stackoverflow.com/questions/41965485
复制相似问题