Bash:Bash脚本中的浮点计算



我正在使用以下脚本读取一些数字并计算它们的平均值。然而,浮点计算似乎不能像这样执行。

hours=0
#echo "n" >> user-list.txt
while IFS=, read -r col1 col2 col3 col4 col5 col6 col7 || [[ -n $col1 ]]
do
((hours = hours + col5))
#echo "$col1, $col2"
done < <(tail -n+2 user-list.txt)
((hours = hours/10))
echo "$hours" > wednesday.txt

如何在此脚本中执行浮点计算?

以下是输入文件的示例:

Computer ID,User ID,M,T,W,T,F
Computer1,User3,5,7,3,5,2
Computer2,User5,8,8,8,8,8
Computer3,User4,0,8,0,8,4
Computer4,User1,5,4,5,5,8

TIA-

awk脚本将处理数据并计算结果。

awk -F, 'FNR>1 { hours += $5 } END { print hours/10; }' user-list.txt

当然,您可以将输出重定向到一个文件。

awk -F, 'FNR>1 { hours += $5 } END { print hours/10; }' user-list.txt > wednesday.txt

说明:

-F,指定,作为字段分隔符
FNR>1条件跳过每个文件的第一行(列名(
{ hours += $5 }求和第五列
END { print hours/10; }在最后打印结果

该脚本允许处理多个文件,如下所示:

awk -F, 'FNR>1 { hours += $5 } END { print hours/10; }' file1 file2 file3 [...] > outputfile
awk -F, 'NR > 1 { hours+=$5 } END { printf "%.2f",hours/10 }' <user-list.txt > wednesday.txt

使用awk,将逗号设置为字段分隔符,然后将user-list.txt重定向到awk中。对于每一行,将hours设置为hours加上第五个逗号分隔的值。最后,将小时数除以10,打印到小数点后2位。将输出重定向回wednesday.txt。

最新更新