Você pode não querer usar bc
para isso. Talvez awk
funcione melhor:
awk '{sum+=$1};END{print sum/NR}' /path/to/file
Eu entendo bash
e alguns outros intérpretes só realizam aritmética para inteiros. No seguinte for
loop, como posso fazer isso? Eu li que bc
pode ser usado, mas não tenho certeza de como usar bc
nessa situação.
total=0
for number in 'cat /path/to/file'; do
total=$(($total+$number))
done
average=$(($total/10))
echo Average is $average
arquivo :
1.143362
1.193994
1.210489
1.210540
1.227611
1.243496
1.260872
1.276752
1.294121
1.427371
Como marcado bash , aqui está uma alternativa bash
4.0 resposta da choroba , para evitar wc
e sed
:
bash-4.2$ mapfile -t a < file
bash-4.2$ (IFS='+'; echo "(${a[*]})/${#a[@]}") | bc -l
1.24886080000000000000
Eu costumo usar bc
para aritmética de ponto flutuante:
file=1.txt
echo '('$(<$file)')/'$(wc -l < $file) | sed 's/ /+/g' | bc -l
term=0
file=input
for number in 'cat "$file"'; do
term="${term}+${number}"
done
total="$(echo "$term" | bc -l)"
average="$(echo "${total}/10" | bc -l)"
average="$(echo "$average" | sed -e 's/^\(.*\..*[^0]\)0*//' -e p)"
echo "Total: ${total}"
echo "Average: ${average}"
Tags bash bc shell-script