【问题标题】:sum same column across multiple files using awk ?使用 awk 对多个文件的同一列求和?
【发布时间】:2013-09-03 19:43:50
【问题描述】:

我想添加 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

文件名:

freqdat044.dat
freqdat045.dat
freqdat046.dat
freqdat047.dat 
freqdat049.dat
freqdat050.dat

并保存在输出文件中,仅包含 $2 和新的 col 形成第三个的总和

【问题讨论】:

  • 请输入/输出示例!

标签: awk


【解决方案1】:
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

【讨论】:

  • 第一个代码改变了第二个列?我希望频率保持不变 -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.62676207503 0 0 3 -937.770965499483 0 0 4 -943.915310961806 0 0 5 -950.059798879229 0 0 6 -956.204428774916 1 1 7 -962.349201066099 0 0 8 -968.494115573965 0 0 9 -974.639172358118 1 1 10 -980.784371478163 1 1 11 -986.92971281489 0 0 12 -993.075196427904 0 0 13 -999.220822317206 0 0 14 -1005.36659066161 0 0 15 -1011.51250122269 0 0 16 -1017.65855411967 0 0 17 -1023.80474941214 1 1 18 -1029.9510869809 0 0 19 -1036.09756700476 0 0
  • 我觉得其中一个文件没有添加?因为当我尝试使用两个文件时,它只能工作
  • 感谢 Nirk,我们错过了文件 freqdat048.dat,请您知道我是否要插入起始文件名和结束文件名我应该做什么,比如制作一个导入 freqdat0xy 的循环。 dat 到 freqdat0XnYn.dat 并仅限于这些文件?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-29
  • 1970-01-01
  • 2015-03-11
  • 2015-01-29
相关资源
最近更新 更多