我有一个看起来像的文件:
381932
148457
304268
254699
我想编写一个shell脚本,它将每行返回为总数的一部分:
0.350603476
0.1362796
0.279309978
0.233806946
如何在shell脚本中使用?
答案 0 :(得分:1)
#!/bin/bash
total=$(echo $(<file) | tr ' ' '+' | bc)
while read num; do echo "scale=9;$num/$total" | bc; done < file
答案 1 :(得分:1)
awk可能有所帮助:
awk '{s+=$1;a[NR]=$1}END{for(i=1;i<=NR;i++)printf "%.9f\n", a[i]/s}' file
输出:
0.350603476
0.136279600
0.279309978
0.233806946
答案 2 :(得分:1)
sum=$(perl -nle '$sum += $_ } END { print $sum' file)
awk -v "sum=$sum" '{print $1/sum}' file
0.350603
0.13628
0.27931
0.233807
这个问题需要通过文件2次:一次计算总和,一次打印分数。
另一种方法是在总和时存储行:
awk '{sum += $1; n[NR]=$1} END {for (i=1; i<=NR; i++) print n[i]/sum}' file
这具有更高的内存要求,值得注意的是,如果您的文件非常大。