[英]Linux differences between consecutive lines
我需要循環通過文件的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...
行每小時用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
,因為該列已用於數值計算。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.