我想从下面的数据文件中计算累积值,并在插入序列号后将它们写入列中。
ifile.txt
1 2 3 2 3 1 4 5 1
3 4 5 2 3 4 1 3 1
1 3 2 3 2 4 1 2 4 ...............
本例中 ifile.txt 有 3 行 9 列。 期望输出:
ofile.txt
1 1 3 1
2 3 7 4
3 6 12 6
4 8 14 9
5 11 17 11
6 12 21 15
7 16 22 16
8 21 25 18
9 22 26 22
.
.
.
此处第一列用于序列号。 所以我所做的是:我首先使用
转换为列awk '{
for (i=1; i<=NF; i++) {
a[NR,i] = $i
}
}
NF>p { p = NF }
END {
for(j=1; j<=p; j++) {
str=a[1,j]
for(i=2; i<=NR; i++){
str=str" "a[i,j];
}
print str
}
}' ifile.txt > ifile1.txt
然后我用awk
awk '{print m1=$1+m1, m2=$2+m2, m3=$3+m3}' ifile1.txt > ofile.txt
我无法继续下一步,即插入一列序列号。我也不能为任意列和行制作它。
最佳答案
对于序列号栏
awk '{print i=i+1,m1=$1+m1, m2=$2+m2, m3=$3+m3}' ifile1.txt > ofile.txt
并完整解决你的逻辑
awk '{for(i=1;i<=NF;i++){if(i>1)$i=$i+$(i-1);f[i]=f[i]" "$i}if(NF>n)n=NF}END{for(i=1;i<=n;i++)print i,f[i]}'
关于linux - 如何计算 Shell 中的累积值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31803612/