2011-06-01 151 views
2

任何人都可以教我如何計算時間差的平均值嗎?例如awk,計算不同時間間隔的平均值

412.00 560.00 
    0 0 
    361.00 455.00 561.00 
    0 0 
    0 0 
    0 0 
    237.00 581.00 
    425.00 464.00 
    426.00 520.00 
    0 0 

正常情況下,他們做所有這些數字鴻溝的總和總集數

sum/NR 

這裏

  1. 挑戰的列的數量是動態的,這意味着並不是所有的行都有相同的數字列
  2. 來計算平均值,例如我們有這個:361.00 455.00 5 61.00

    so the calculation : 
        ((455-361) + (561 - 455))/2 
    

所以,我期待的輸出是這樣的:

 total_time divided_by average 
     148  1   148 
     0   1   0 
     200  2   100 
     0   1   0 
     0   1   0 
     0   1   0 
     344  1   344 
     :   :   : 
     :   :   : 
     :   :   : 

我嘗試用awk,但我堅持......

+0

顯示你的代碼。 – daxim 2011-06-01 09:33:15

回答

2

的中間值上具有三個或更多時間值的行是沒有意義的 - 只有值的數量很重要。要看到這個從您的例子中,注意:

((455-361) + (561 - 455))/2 = (561 - 361)/2 

因此,你真的只需要像做

cat time_data | 
    awk '{ printf("%f\t%d\t%f\n", ($NF - $1), (NF - 1), ($NF - $1)/(NF - 1)) }' 

爲了您的樣本數據,這給你指定的結果(雖然未格式化爲很好,當你呈現它)。

這假設時間值是按行排序的。如果不是,則分別計算最大值和最小值,並分別替換$NF$1

0

bash腳本:

#!/bin/bash 
(echo "total_time divided_by average" 
while read line 
do 
arr=($line) 
count=$((${#arr[@]}-1)) 
total=$(bc<<<${arr[$count]}-${arr[0]}) 
echo "$total $count $(bc<<<$total/$count)" 
done < f.txt) | column -t 

輸出

total_time divided_by average 
148.00  1   148 
0   1   0 
200.00  2   100 
0   1   0 
0   1   0 
0   1   0 
344.00  1   344 
39.00  1   39 
94.00  1   94