AWK(或其他)多个文件中多列的平均值

时间:2016-07-31 18:33:33

标签: linux bash awk

我会很感激awk脚本的帮助,或者无论做什么工作。

所以,我有多个文件(相同数量的行和列),我想对所有文件中每个列(除了第一个)的每个数字做一个平均值。我不知道文件中有多少列(尽管如果需要我可能会得到这个数字)。

filename.1

1 1 2 3 4
2 3 4 5 6
3 2 3 5 6

filename.2

1 3 4 6 6
2 5 6 7 8
3 4 5 7 8

输出

1 2 3 5 5
2 4 5 6 7
3 3 4 6 7

我在这里的某个地方找到了这个,就一栏而言(据我所知)

awk '{a[FNR]+=$2;b[FNR]++;}END{for(i=1;i<=FNR;i++)print i,a[i]/b[i];}' fort.*

那么唯一的?改变是用所有列的循环替换+ = $ 2?有没有办法在不知道确切列数的情况下做到这一点?

感谢。

1 个答案:

答案 0 :(得分:4)

Array

以上使用GNU awk作为ARGIND,其他awks只是在开头添加一行$ cat tst.awk { key[FNR] = $1 for (colNr=2; colNr<=NF; colNr++) { sum[FNR,colNr] += $colNr } } END { for (rowNr=1; rowNr<=FNR; rowNr++) { printf "%s%s", key[rowNr], OFS for (colNr=2; colNr<=NF; colNr++) { printf "%s%s", int(sum[rowNr,colNr]/ARGIND+0.5), (colNr<NF ? OFS : ORS) } } } $ awk -f tst.awk file1 file2 1 2 3 5 5 2 4 5 6 7 3 3 4 6 7