linux – 概率排除零后,数组中每个唯一数字(长度未知)的分布
发布时间:2020-12-13 23:54:12 所属栏目:Linux 来源:网络整理
导读:我的部分数据文件看起来像 ifile.txt1130630335 我想找出除零之外的每个数字的概率.例如P(1)= 2/8; P(3)= 4/8,依此类推 欲望输出 ofile.txt1 0.2503 0.5005 0.1256 0.125 第1列显示除0和第2列之外的唯一数字显示概率.我正在尝试如下,但看起来非常冗长的想法.
我的部分数据文件看起来像
ifile.txt 1 1 3 0 6 3 0 3 3 5 我想找出除零之外的每个数字的概率.例如P(1)= 2/8; P(3)= 4/8,依此类推 欲望输出 ofile.txt 1 0.250 3 0.500 5 0.125 6 0.125 第1列显示除0和第2列之外的唯一数字显示概率.我正在尝试如下,但看起来非常冗长的想法.我在for循环中遇到问题,因为有很多唯一的数字 n=$(awk '$1 > 0 {print $0}' ifile.txt | wc -l) for i in 1 3 5 6 ..... do n1=$(awk '$1 == $i {print $0}' ifile.txt | wc -l) p=$(echo $n1/$n | bc -l) printf "%d %.3fn" "$i $p" >> ofile.txt done 解决方法
在awk中使用关联数组可以在一次传递中获取每个唯一编号的计数.
awk '$0 != "0" { count[$0]++; total++ } END { for(i in count) printf("%d %.3fn",i,count[i]/total) }' ifile.txt | sort -n > ofile.txt (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |