使用BASH脚本计算文件中的数字

时间:2019-12-26 12:11:19

标签: bash shell

我有一个包含以下数据记录的文件:

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进行操作?

2 个答案:

答案 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。