我正在尝试学习测试,其中一个主题是bash脚本。 我有以下txt文件:
123456 100
654321 50
203374111 86
我需要得到分数的平均值(第二列中的数字)。
这就是我写的:
cat $course_name$end | while read line; do
sum=`echo $line | cut -f2 -d" "`
let total+=$sum
done
我试过
读取-a行
然后
让sum + = $ {line [1]}
但是我仍然得到标题中提到的相同错误。
答案 0 :(得分:1)
我喜欢AWK:
awk -F\* '{sum+=$3} END {print sum/NR}' x.txt
因此在x.txt中存储了值。请注意,许多答案实际上并不计算平均值,因为它们需要除以最后的行号。通常它会由wc -l < x.txt
执行,但在我的解决方案中,您几乎可以免费获得它。
答案 1 :(得分:0)
你非常接近,这适合我:
while read line; do
sum=$(echo $line | cut -f2 -d" ")
echo "sum is $sum"
let total+=$sum
echo "total is $total"
done < file
echo "total is $total"
如您所见,没有必要使用cat $course_name$end
,这就足够了
while read line
do
done < file
此外,建议使用
sum=$(echo $line | cut -f2 -d" ")
而不是
sum=`echo $line | cut -f2 -d" "`
甚至
sum=$(cut -f2 -d" " <<< "$line")
答案 2 :(得分:0)
cat your_file_name.txt | cut -f2 -d" " | paste -sd+ | bc
这应该可以胜任!
答案 3 :(得分:0)
无需使用cat
以及read
;您可以将文件的内容重定向到循环中。您也不需要使用let
进行算术运算。
sum = 0
count = 0
while read id score; do
(( sum += score )) && (( ++count ))
done < "$course_name$end"
echo $(( sum / count ))
这将给你一个整数结果,因为bash不进行浮点运算。要获得浮点结果,可以使用bc
:
bc <<< "scale=2;$a/$b"
这将为您提供正确到2位小数的结果。