2012-11-07 35 views
-2

我需要幫助使用awk對多個文件進行一些操作。 我總共有500個文件,每個文件包含800行數據和兩列(第1列和第2列)。從許多文件中計算第二列相同行的平均值

我想要添加每個文件(來自所有500個文件)的第一行,第二列並計算平均值並存儲在新的輸出文件中(可以說average.out)。

然後進入所有文件(全部500個文件)的第二行第二列並計算平均值並以average.out存儲。它會一直繼續,直到「average.out」文件包含800行。

在對我的數據進行其他計算之前,我非常需要解決這個計算問題。希望我得到一些見解。

在此先感謝。

+0

http://stackoverflow.com/q/13263963/1741542的可能duplcate。 –

+0

這個答案http://stackoverflow.com/a/13264259/1741542應該已經解決了你的問題。如果您不確定,請添加評論並要求進一步澄清或提供幫助。 –

回答

3

這將顯示所有行號及其平均值。

awk '{a[FNR]=a[FNR]+$2;b[FNR]++;}END{for(i in a){print i,a[i]/b[i]}}' *your_file* 

爲如:

LINE_NUMBER its_average。

下面testted:

> cat temp 
1 10 
2 28 
3 20 
4 79 
> cat temp2 
1 12 
2 30 
3 22 
4 81 
> awk '{a[FNR]=a[FNR]+$2;b[FNR]++;}END{for(i in a){print i,a[i]/b[i]}}' temp temp2 
2 29 
3 21 
4 80 
1 11 
+0

可能是你可以使用管道和排序命令。 'awk'{....}'fort。* | sort' – Vijay

+1

你爲什麼要做'if(FNR!= NR){NR = FNR}'?不要混淆內置變量的含義來混淆腳本,只需使用FNR而不是NR作爲數組索引。另外'a [FNR] = a [FNR] + $ 2'可以更簡潔地寫爲'a [FNR] + = $ 2',最後在增加b之後擺脫空語句(尾隨分號)。 –

+0

感謝大家。我可以解決這個問題。 – Vijay