2016-03-23 6 views
0

Я работаю над небольшим сценарием, чтобы взять 3 числа в одной строке, суммировать и усреднять их и распечатать результат в конце строки. Я знаю, как использовать команду paste, но все, что я нахожу, говорит мне, как выровнять столбец. Мне нужно усреднить строку, а не столбец. Любой совет? Благодаря!Сумма/Средние числа в одной строке - UNIX

+3

Любой входной образец? – sat

+5

не было бы просто ($ 1 + $ 2 + $ 3)/3? –

ответ

1

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 
+0

Или Perl: 'echo '1 2 3" | perl -pae '$ _ = eval (join "+", @ F)/@ F'' – andlrc

+0

@andlrc Нет необходимости предоставлять переводы ответов на другой язык в комментариях. Если вы считаете, что решение 'perl' лучше, отправьте его как ответ. – chepner

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 [email protected]" 
    echo "Integer mean" 
    echo "[email protected]" | sed -e 's/\([0-9.]\) /\1+/g' -e 's/.*/(&)\/'$#'/' | bc 

    echo "floating decimal mean" 
    echo "[email protected]" | sed -e 's/\([0-9.]\) /\1+/g' -e 's/.*/(&)\/'$#'/' | bc -l 

    echo "2 decimal output mean" 
    echo "[email protected]" | 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 
Смежные вопросы