【问题标题】:Awk script: loop through rows and get sumawk 脚本:遍历行并获取总和
【发布时间】:2015-08-04 20:29:43
【问题描述】:

我正在整理一个 (g)awk 文件脚本,该脚本循环遍历输入文件中提供的数字数据,并且必须对每一行中的值求和。我正在创建一个数组并将行和添加到每个数组位置。下面是我的代码。逻辑似乎没问题,但输出关闭:

for(i = 1; i <= NF; ++i){
   for(j = 1; j <= NR; ++j){
       row[i] += $j
   }
}

【问题讨论】:

    标签: awk


    【解决方案1】:

    您不能循环遍历这些行。通过行的循环由awk 在读取文件时隐式完成。

    所以你只需要更新当前行的数组中的值:

    awk '{for (i=1;i<=NF;i++) a[i]+=$i}' file
    

    然后,您可以在END 块内打印摘要。

    看一个例子:

    $ cat a
    1 2 3 4 5
    6 7 8 9 10
    $ awk '{for (i=1;i<=NF;i++) a[i]+=$i} END {for (i in a) print i " -> " a[i]}' a
    1 -> 7
    2 -> 9
    3 -> 11
    4 -> 13
    5 -> 15
    

    【讨论】:

    • 很高兴读到这一点,@user2781042!由于您是新来的,如果您的问题已经解决,请不要忘记将答案标记为已接受。您可以单击答案旁边的复选标记将其从空心切换为绿色。如有任何问题,请参阅Help Center > Asking
    • 谢谢你的提醒。跟进您的回答:您的示例指示了获取列总计的方式。我仍然无法弄清楚如何正确总结 ROWS。我发现当我使用记录编号值时我没有得到预期的结果:{for(i = 1; i
    • @user2781042 不确定“求和行”是什么意思:对一行中的所有元素求和?如果是这种情况,awk '{sum=0; for (i=1;i&lt;=NF;i++) sum+=$i; print sum}' file 之类的就可以了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多