我正在处理一个小脚本,在一行中取3个数字,对它们求和并取平均值,然后在行尾打印结果。我知道如何使用粘贴命令,但我发现的一切都告诉我如何平均列。我需要平均一条线,而不是一列。有什么建议?谢谢!
答案 0 :(得分:2)
awk
救援!
$ echo 1 2 3 | awk -v RS=' ' '{sum+=$1; count++} END{print sum, sum/count}'
6 2
适用于任意数量的输入字段
$ echo 1 2 3 4 | awk -v RS=' ' '{sum+=$1; count++} END{print sum, sum/count}'
10 2.5
答案 1 :(得分:0)
您可以在将线路交给bc
之前操纵线路。使用bc
,您可以设置其他可能性,例如设置比例。
从1 2 3开始的简单均值
echo "1 2 3" | sed -e 's/\([0-9.]\) /\1+/g' -e 's/.*/(&)\/3/' | bc
您可以将其包装在一个函数中,并查看更多可能性:
function testit {
echo "Input $@"
echo "Integer mean"
echo "$@" | sed -e 's/\([0-9.]\) /\1+/g' -e 's/.*/(&)\/'$#'/' | bc
echo "floating decimal mean"
echo "$@" | sed -e 's/\([0-9.]\) /\1+/g' -e 's/.*/(&)\/'$#'/' | bc -l
echo "2 decimal output mean"
echo "$@" | sed -e 's/\([0-9.]\) /\1+/g' -e 's/.*/scale=2; (&)\/'$#'/' | bc
echo
}
testit 4 5 6
testit 4 5 8
testit 4.2 5.3 6.4
testit 1 2 3 4 5 6 7 8 9