【发布时间】:2014-06-06 21:25:30
【问题描述】:
我有多个类似的文件,例如c1.txt, c2.txt.... 等,我想平均所有文件的第 7 列的每一行并将输出写入另一个文件。每个文件有 45120 行或行。为了计算我写的第 7 列的总和:
awk '{a[FNR]+=$7;b[FNR]++;}END{for(i=1;i<=FNR;i++)print a[i]/b[i];}' c* > ave_result.txt
然后它打印出第 7 列每行平均值的一半,并且只打印到第 264 行。我检查了第 264 行的输出,它甚至没有打印这些文件平均值的一半。
我应该如何修改 awk 命令以计算第 7 列中每行的正确平均值?谢谢你。 例如,第一个文件的几行是
1 1 1 1 1 1 2.559346e-08 2.080054e-10
1 1 1 1 1 2 1.398551e-09 2.709745e-09
1 1 1 1 1 3 -7.939651e-10 -1.560374e-09
在第二个文件中类似:
2 1 1 1 1 1 2.579924e-08 2.756949e-09
2 1 1 1 1 2 -1.333798e-10 1.700513e-09
2 1 1 1 1 3 2.334223e-09 -3.592740e-09
等等。我想计算我拥有的所有文件的第 7 列的平均值。所以预期的输出是
2.579924e-08
6.3259e-10
6.3259e-10
如果我有 200 个这样的文件并且每个文件有 45120 行,现在如何编辑 awk 命令?
【问题讨论】:
-
编辑您的问题以显示您的问题的示例数据。我们应该只需要查看 2-3 行数据,每行 5-7 个字段。然后包括该输入的预期输出。祝你好运。
-
您有少于 7 列的文件吗?
-
为什么不
{sum+=$7;}END{print sum/NR}...加上任何你需要考虑的格式和空白或无用的数据行...如果没有细节就不能走得更远。 -
我在编辑的问题中添加了示例计算。谢谢
标签: awk