【问题标题】:Getting Probabilities from a file of counts从计数文件中获取概率
【发布时间】:2012-05-26 12:17:46
【问题描述】:

我有一堆文件的行看起来像这样

 54 apples
  7 oranges
  1 bananas

我想获得其中每一个的概率。也就是说,我想要以下内容:

 0.87 apples
 0.11 oranges
 0.02 bananas

我可以轻松地为每个文件单独计算总和

awk '{sum += $1} END {print sum}' input.txt

但我想知道如何计算概率。

【问题讨论】:

    标签: unix math awk terminal


    【解决方案1】:

    除非您想对文件运行两次,否则您需要将所有行存储在内存中。

    awk '{sum += $1; line[NR,1] = $1; line[NR,2] = $2} END{for(i=0; i<NR; i++) print line[i,1]/sum, line[i,2]}' file
    

    【讨论】:

      【解决方案2】:

      这是规范的awk,不会将文件存储在内存中:

      awk 'FNR==NR { sum += $1; next; } { printf "%.2f %s\n", $1/sum, $2 }' input.txt{,}

      HTH

      【讨论】:

        【解决方案3】:

        可能会改变顺序

        awk '{n[$2]=$1} END {for (fruit in n) printf("%.2d %s\n", n[fruit]/NR, fruit)}' file 
        

        或保留顺序

        awk -v lines="$(wc -l < file)" '{$1 = sprintf("%.2d", $1/lines}; print' file
        

        【讨论】:

          猜你喜欢
          • 2016-10-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-25
          • 2021-03-15
          • 1970-01-01
          相关资源
          最近更新 更多