如何通过echo和bc命令使用第二条管道?

时间:2018-12-03 20:37:32

标签: bash macos shell pipe

我想使用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 :(得分:0)

您的第一行工作正常:

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

答案 1 :(得分:0)

在我之前的赛勒斯是对的。 我的问题是每行中都有更多数据,而我使用grep时并没有“抓住”它。 (grep "^[0-9]*$"由于第^$个符号而查找仅包含数字的行。

grep更改为egrep后,以下行:

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

完全解决了我的问题。