簡體   English   中英

使用 bash 取十進制數的平均值

[英]Taking average of decimal number using bash

如何取寫入文件中的十進制值的平均值:TestFile as

Time to write: 0.000118000 sec

Time to write: 0.000119000 sec

Time to write: 0.000122000 sec

錯誤的索爾:

以下僅打印零,即 0

awk '{sum+=$7}END{print sum/NR}' TestFile

此解決方案將針對正確的行進行計算:

awk '/Time to write/ {sum+=$4; count++} END {print "avg:", sum/count}' data.txt

編輯

因為你遇到了麻煩,並且似乎返回零嘗試使用這個

grep -oP "\d+\.\d+" testFile | awk -vx=0 '{x += $1} END {print x/NR}'

如果文件是雙倍行距的,這將起作用。 它只打印具有十進制數字的文件的匹配項。 並將其發送到 awk。

-P 標志是 perl 正則表達式。 你可以用 -E 做同樣的事情,但是\d+匹配一個或多個數字, \. 匹配一個句點。 一個。 在正則表達式中具有特殊含義,需要轉義,並且\d+匹配一個或多個數字,因此將它們放在一起, '\d+\.\d+' ,你有一個小數。

最后,如果您繼續獲得科學記數法,您可以考慮使用 printf 來實現浮點記數法

awk -vx=0 '{x += $4} END { printf ("%8.9f", x/NR) } testFile'

你可以指定一些更小的東西,比如“%4.3f”,在小數點后只打印 4 個數字,相反,使用 %e 以科學記數法打印

更多在 awk 中使用awk


舊資料,見上<hr>

awk -vx=0 '{x += $4} END {print x/NR}' testFile

輸出:

0.000119667

對於每一行 append $4,在你的測試文件中是數字,到 x。 最后除以 x 為行數。

如果您的文件真的是雙倍行距,請先運行以下命令:

sed -i '/^$/d' testFile刪除空行。 您可能要考慮不通過刪除 -i 並執行類似sed '/^$/d' testFile > newFile來編輯 testFile

甚至將這兩個文件和 pipe 標准輸出從sedawk

sed '/^$/d' testFile | awk -vx=0 '{x += $4} END {print x/NR}'

如果返回 0,則您的 testFile 可能有問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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