【问题标题】:How to use a sum of values for each row using awk如何使用awk为每一行使用值的总和
【发布时间】:2020-07-22 21:48:00
【问题描述】:

我有一个小 txt 文件:

Josh 10
Bill 10
Samanda 30

所有数字的总和是 50。 如何使用这个总和来划分每一行的值?

0.2 # 10/50
0.2 # 10/50
0.6 # 30/50

我的 awk 脚本没有按预期工作:

BEGIN {
sum += $2;
}
{
print $2/sum
}

它返回 0。

【问题讨论】:

    标签: awk


    【解决方案1】:

    您能否尝试在 GNU awk 中使用所示示例进行跟踪、编写和测试。

    awk '
    {
      val[NR]=$2
      sum+=$2
    }
    END{
      for(i=1;i<=NR;i++){
        print sum?val[i]/sum:0
      }
    }
    ' Input_file
    

    说明:为上述添加详细说明。

    awk '                            ##Starting awk program from here.
    {
      val[NR]=$2                     ##Creating array val whose index is  current line number and value is 2nd field of current line.
      sum+=$2                        ##Creating sum which has 2nd column value in it which is keep on getting added in it.
    }
    END{                             ##Starting END block of this code here.
      for(i=1;i<=NR;i++){            ##Starting a for loop from i 1 to till value of count here.
        print sum?val[i]/sum:0       ##Printing val[i]/sum value here if sum is NOT NULL else printing 0 here.
      }
    }
    ' Input_file                     ##Mentioning Input_file name here.
    

    【讨论】:

      【解决方案2】:

      BEGIN 在任何输入文件打开之前为真,这就是为什么脚本中的sum += $2 只将sum 设置为零的原因。

      $ awk 'NR==FNR{sum+=$2; next} {print (sum ? $2/sum : "NaN")}' file file
      0.2
      0.2
      0.6
      

      三进制是为了防止sum为零时被零除。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-28
        • 1970-01-01
        • 1970-01-01
        • 2019-06-14
        • 1970-01-01
        相关资源
        最近更新 更多