SYN*_*CRo 8 linux bash line difference
我需要循环n文件的行和任何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
Run Code Online (Sandbox Code Playgroud)
这些/dev/vda...行每小时df -BM在cron.log文件中记录,行之间的差异将显示每小时磁盘消耗.
所以,预期的产出将是:
23 (4595 - 4572)
24 (4572 - 4548)
...
43 (4420 - 4377)
21 (4377 - 4356)
Run Code Online (Sandbox Code Playgroud)
我不需要的文本(和),我把它放在这里仅用于说明.
hek*_*mgl 12
我不确定我是否正确,但以下awk脚本应该有效:
awk '{if(NR>1){print _n-$4};_n=$4}' your.file
Run Code Online (Sandbox Code Playgroud)
输出:
23
24
21
21
22
25
18
21
43
21
Run Code Online (Sandbox Code Playgroud)
您不需要管道中的其他程序.只是:
awk '/\/dev\/vda/ {if(c++>0){print _n-$4};_n=$4}' src/checkout-plugin/a.txt
Run Code Online (Sandbox Code Playgroud)
就足够了.awk脚本启动时的正则表达式告诉awk仅将以下块应用于与模式匹配的行.副作用是NR不能再用于检测计算开始的"第二行".我c为此目的介绍了一个客户柜台.
另请注意,awk将删除M它自己,因为该列已用于数值计算.