【发布时间】:2015-07-27 05:43:15
【问题描述】:
我想计算 15 个文件的平均值:- ifile1.txt、ifile2.txt、.....、ifile15.txt。每个文件的列数和行数相同。部分数据看起来像
ifile1.txt ifile2.txt ifile3.txt
3 5 2 2 . 1 2 1 3 . 4 3 4 1 .
1 4 2 1 . 1 3 0 2 . 5 3 1 5 .
4 6 5 2 . 2 5 5 1 . 3 4 3 1 .
5 5 7 1 . 0 0 1 1 . 4 3 4 0 .
. . . . . . . . . . . . . . .
我想找到一个新文件,它会显示这 15 个文件的平均值。
ofile.txt
2.66 3.33 2.33 2 . (i.e. average of 3 1 4, average of 5 2 3 and so on)
2.33 3.33 1 2.66 .
3 5 4.33 1.33 .
3 2.33 4 0.66 .
. . . . .
我正在尝试关注,但出现错误
awk'{for (i=1; i<=NF; i++)} rows=FNR;cols=NF} END
{for (i=1; i<=rows; i++){for (j=1; j<=cols; j++)
s+=$i;print $0,s/NF;s=0}}' ifile* > ofile.txt
【问题讨论】:
-
错误信息可能会帮助别人回答你。
-
您为什么要访问
END块中的$0和$i?在你读完所有文件后运行,没有当前记录要处理。 -
如 (
awk'{for (i=1; i<=NF; i++)} rows=FNR;cols=NF} END …) 所写,您会收到“找不到命令”作为错误,因为您必须在awk和脚本'…'之间留一个空格。当你修复它时,你开始遇到问题,因为脚本的第一行有两个},只有一个{。