2012-11-07 33 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