Scripting
每 5 行整數相加
我正在寫一個解析器,並且必須做一些花哨的事情。我試圖不使用 python,但此時我可能不得不這樣做。
給定一個如下所示的 STDOUT:
1 0 2 3 0 0 1 0 0 2 0 3 0 4 0 5 0 2 . . .
對於 100,000 行。我需要做的是每 5 個加起來,如下所示:
1 - start 0 | 2 | - 6 3 | 0 - end 0 - start 1 | 0 | - 3 0 | 2 - end 0 - start 3 | 0 | - 7 4 | 0 - end 5 0 2 . . .
,
-
,|
,start
,end
都是用於視覺表示,我只需要在列列表中使用它:6 3 7 . . .
我目前有一種方法,通過使用增量
head -n $i
並tail -n 5
從列表中刪除 5 行,然後paste -sd+ - | bc
將所有值相加。但這太慢了,因為有 100,000 行。我怎樣才能做得更好?
cat numbers.txt | awk '{sum += $1; if (NR % 5 == 0) {print sum; sum=0}} END {if (NR % 5 != 0) print sum}'
sum
在 awk 中從 0 開始。每五行列印目前的數字總和,然後將總和重置為零並遍歷接下來的五行。最後END
處理文件中行數不是 5 的倍數的邊緣情況,例如,如果文件中有 18 行,它將列印最後 3 行的總和。當行數是五的倍數時,它還處理不列印不需要的零的邊緣情況。