我会很感激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?有没有办法在不知道确切列数的情况下做到这一点?
感谢。
答案 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
。