Как использовать второй трубопровод с командами echo и bc? - PullRequest
0 голосов
/ 03 декабря 2018

Я хочу использовать команды echo | bc для вычисления большого объема вычислений.например:

echo "scale=8; sqrt($NUM)" | bc -l

, который вычисляет квадратный корень из NUM с точностью до 8 десятичных цифр.

теперь предположим, что у меня есть файл numbers.txt, который содержит много чисел, и я хочувычислите квадратные корни всех из них.

Я пытался использовать

grep -ow "^[0-9]*$" numbers.txt | xargs -I '{}' echo "scale=8; sqrt({})" | bc -l

grep -ow "^[0-9]*$" numbers.txt | xargs -I '{}' (echo "scale=8; sqrt({})" | bc -l)

grep -ow "^[0-9]*$" numbers.txt | xargs -I '{}' $(echo "scale=8; sqrt({})" | bc -l)

read num numbers.txt | echo "scale=8; sqrt($num)" | bc -l

и еще несколько их вариантов, но не смог найти способ заставить его работать.Есть идеи?

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Сайрус до меня был прав.Моя проблема заключалась в том, что у меня было больше данных в каждой строке, и grep, когда я их использовал, не "greped".(grep "^[0-9]*$" искали строки, содержащие только цифры из-за символов ^ и $.

после изменения grep на egrep, строка:

egrep -ow "[0-9]+" numbers.txt | xargs -I {} echo "scale=8; sqrt({})" | bc -l

полностью решил мою проблему.

0 голосов
/ 03 декабря 2018

Ваша первая строка работает отлично:

grep -ow "^[0-9]*$" numbers.txt | xargs -I {} echo "scale=8; sqrt({})" | bc -l
...