连续行之间的Linux差异

我需要循环一个文件的n行,并且对于i between 1 and n - 1任何i between 1 and n - 1来获得差异line(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...行会每小时logging一次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不能再用来检测计算开始的“第二行”。 为此,我介绍了一个客户柜台。

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