我有一个包含以下数据记录的文件:
0.005
0.027
0.352
1.005
0.117
0.752
我正在尝试使用bash逐行读取文件,并将数字分为3组:
if [($num < 0.2)] then min++
if [($num > 0.2) && ($num < 1)] then med++
if [($num > 1)] then max++
最后,我需要将3变量打印到文件中,以计算所有记录。 任何想法如何在bash中读取文件并在bash中使用float进行操作?
答案 0 :(得分:1)
不幸的是,bash不太喜欢浮点数。但是,您可以使用其他文本处理工具,例如awk
:
awk '{if($0 < 0.2)min++; else if($0 < 1)med++; else max++;} END {print min, med, max;}' file.txt
还请注意,您的算法无法精确处理0.2和1处的数字。
答案 1 :(得分:0)
如果您一定要使用bash
进行操作,可能的解决方法将是
将数字乘以1000(或任何适当的数字)并加以处理
它们是整数。怎么样:
while read -r x; do
num=$((10#$(printf "%.3f" "$x" | tr -d ".")))
# echo "$num"
(( num < 200 )) && (( min++ ))
(( num > 200 && num < 1000 )) && (( med++ ))
(( num > 1000 )) && (( max++ ))
done < "data.txt"
printf "min=%d med=%d max=%d\n" "$min" "$med" "$max"
作为@dibery注释,您需要确定如何处理精确的0.2和1。