linux如何截取指定字符串行前后N行的数据

有如下数据,是显示系统连接信息的字符串,现在要统计每个ip的链接字节数,例如,截取所有src=192.168.1.5,的字节数,并相加。我的思路是:先grep找到"192... 有如下数据,是显示系统连接信息的字符串,现在要统计每个ip的链接字节数,例如,截取所有src=192.168.1.5,的字节数,并相加。

我的思路是:先grep找到"192.168.1.5"往下数2行,截取其数字部分,并循环依次相加,但这shell代码怎么写?

注意,是用shell写,C语言我会

1 table: 0x767160
layer3 ipv4
type 8
layer4 icmp
code 0
id 19
src 192.168.1.5
packets 34123
bytes 2047380
dst 218.16.118.54
2 table: 0x767750
bytes 62
src 192.168.1.5
sport 54675
layer4 udp
dst 192.168.1.1
dport 53
layer3 ipv4
packets 1

…………………………
补充:字符串里面有很多个ip的信息,我只需要一个。不能简单匹配 所有bytes行
展开
 我来答 举报
yss624_
2015-11-02 · TA获得超过4.7万个赞
知道大有可为答主
回答量:9775
采纳率:77%
帮助的人:2638万
展开全部
你第二个表项192.168.1.5往下数两行并不是字节数呀。
追问
有道理,icmp和其他协议的显示格式不同,能不能这样:
根据table为标识符,分割字符串,若在每段中出现"src+任意空格+192.168.1.5",就查找当前分段里的bytes后面的数字
追答

试了一下,这个可以:

$ gawk -v RS='table:'  '/src\s+192.168.1.5/{num+=gensub(/.*bytes\s+([0-9]+).*/,"\\1","a")} END{print num}' 1.txt


结果2047442


懂事且健壮灬小喵e
2015-11-02 · TA获得超过756个赞
知道小有建树答主
回答量:575
采纳率:52%
帮助的人:416万
展开全部
1
cat data.txt|awk  'BEGIN{sum=0}{if(/192\.168\.1\.5/){getline;getline;match($0,/bytes[^0-9]*?([0-9]*).*/,r);if(r[1])sum=sum + r[1]}}END{print sum}'
更多追问追答
追问
192.168.1.5可能出现在src和dst,只需要找,匹配src+任意个空格+192.168.1.5,怎么改?
追答
src[^0-9]*192\.168\.1\.5
本回答被网友采纳
抢首赞 已赞过 已踩过<
你对这个回答的评价是?
评论 举报 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式