簡體   English   中英

連續行之間的Linux差異

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM