加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

连续行之间的Linux差异

发布时间:2020-12-14 02:22:22 所属栏目:Linux 来源:网络整理
导读:我需要循环通过文件的n行和1和n – 1之间的任何i来获得差异线(n – 1) – line(n). 这是源文件: root@syncro:/var/www# cat cron.log | grep "/dev/vda"/dev/vda 20418M 14799M 4595M 77% //dev/vda 20418M 14822M 4572M 77% //dev/vda 20418M 14846M 4548M
我需要循环通过文件的n行和1和n – 1之间的任何i来获得差异线(n – 1) – line(n).

这是源文件:

root@syncro:/var/www# cat cron.log | grep "/dev/vda"
/dev/vda          20418M 14799M     4595M  77% /
/dev/vda          20418M 14822M     4572M  77% /
/dev/vda          20418M 14846M     4548M  77% /
/dev/vda          20418M 14867M     4527M  77% /
/dev/vda          20418M 14888M     4506M  77% /
/dev/vda          20418M 14910M     4484M  77% /
/dev/vda          20418M 14935M     4459M  78% /
/dev/vda          20418M 14953M     4441M  78% /
/dev/vda          20418M 14974M     4420M  78% /
/dev/vda          20418M 15017M     4377M  78% /
/dev/vda          20418M 15038M     4356M  78% /
root@syncro:/var/www# cat cron.log | grep "/dev/vda" | cut -b 36-42 | tr -d " M"
4595
4572
4548
4527
4506
4484
4459
4441
4420
4377
4356

那些/ dev / vda …行每小时用cron.log文件中的df -BM记录,行之间的差异将显示每小时磁盘消耗.

因此,预期产量将是:

23 (4595 - 4572)
24 (4572 - 4548)
...
43 (4420 - 4377)
21 (4377 - 4356)

我不需要(和)之间的文本,我把它放在这里只是为了解释.

解决方法

我不确定我是否正确,但以下awk脚本应该工作:
awk '{if(NR>1){print _n-$4};_n=$4}' your.file

输出:

23
24
21
21
22
25
18
21
43
21

您不需要管道中的其他程序.只是:

awk '//dev/vda/ {if(c++>0){print _n-$4};_n=$4}' src/checkout-plugin/a.txt

就足够了.启动awk脚本的正则表达式告诉awk仅将以下块应用于与模式匹配的行.副作用是NR不能再用于检测计算开始的“第二行”.我为此目的介绍了一个客户柜台c.

另请注意,awk会自行删除M,因为该列已用于数值计算.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读