使用awk对多个文件中的同一列求和?

使用awk对多个文件中的同一列求和?,awk,Awk,我想添加5个文件的第3列,这样新文件将具有相同的第2列和5个文件的第3列的总和 我试过这样的方法: $ cat freqdat044.dat | awk '{n=$3; getline <"freqdat046.dat";print $2" " n+$3}' > freqtrial1.dat freqdat048.dat`enter code here`$ cat freqdat044.dat | awk '{n=$3; getline <"freqdat046.dat";

我想添加5个文件的第3列,这样新文件将具有相同的第2列和5个文件的第3列的总和

我试过这样的方法:

$ cat freqdat044.dat | awk '{n=$3; getline <"freqdat046.dat";print $2" " n+$3}' > freqtrial1.dat 

freqdat048.dat`enter code here`$ cat freqdat044.dat | awk '{n=$3; getline <"freqdat046.dat";print $2" " n+$3}' > freqtrial1.dat
并保存在输出文件中,仅包含
$2
,新列构成第三列的总和

awk '{x[$2] += $3} END {for(y in x) print y,x[y]}' freqdat044.dat freqdat045.dat freqdat046.dat freqdat047.dat freqdat049.dat freqdat050.dat
这不一定会打印第一个文件中显示的行。如果要保留排序,则必须将排序保存在某个位置:

awk 'FNR==NR {keys[FNR]=$2; cnt=FNR} {x[$2] += $3} END {for(i=1; i<=cnt; ++i) print keys[i],x[keys[i]]}' freqdat044.dat freqdat045.dat freqdat046.dat freqdat047.dat freqdat049.dat freqdat050.dat

awk'FNR==NR{keys[FNR]=$2;cnt=FNR}{x[$2]+=$3}END{for(i=1;例如输入/输出pls!第一个代码更改了第二列?我希望频率保持不变-919.3到-1036,第二个代码给出了错误的答案,因为第一个频率的和应该是3,我得到了2,下一个9,而我应该得到12@walaatamimi
x[$2]
正在跟踪中间金额(由第二列的值索引)。你有样本数据吗?freqdat044.dat 0-919.338782054983 0 0 1-925.482700986468 2 1.4142135623731 2-931.6267620703 0 0 3-937.77095499483 0 4-943.915310961806 0 5-950.059798879229 0 6-956.204428774916 1 1 7-962.3492010066099 0 8-968.494115573965 0 0 0 0 0 9-974.637235818.489-98993.075196427904 0 0 13-999.220822317206 0 0 14-1005.36659066161 0 15-1011.51250122269 0 16-1017.65855411967 0 0 17-1023.80474941214 1 18-1029.9510869809 0 19-1036.09756700476 0 0我觉得其中一个文件没有添加?因为当我尝试使用两个文件时,它只起作用了感谢Nirk,我们错过了文件freqdat048.dat,请回答知道如果我想插入起始文件名和结束文件名,我应该做什么,比如做一个循环,将freqdat0xy.dat导入freqdat0XnYn.dat,并限制在这些文件中吗?
awk 'FNR==NR {keys[FNR]=$2; cnt=FNR} {x[$2] += $3} END {for(i=1; i<=cnt; ++i) print keys[i],x[keys[i]]}' freqdat044.dat freqdat045.dat freqdat046.dat freqdat047.dat freqdat049.dat freqdat050.dat