使用bc的Bash浮点运算给出空白结果?

时间:2017-10-15 15:53:02

标签: bash bc

我正在尝试使用grep计算文本文件中单词的出现次数,然后使用bc将该结果(int)与小数相乘。但是,结果只是一个空白值(我猜是空字符串?)。

我计算文件中单词出现的方式是:

result=$(grep -i -o "$word" $file | wc -l)

然后我尝试通过(其中value是小数)的结果进行浮点数学运算:

sum="value * ( $result )" | bc

然而在终端中,我只得到空白/空行作为结果,没有值或任何东西。我做错了什么?

2 个答案:

答案 0 :(得分:2)

这是一个简单的语法问题。但首先:你知道grep的-c吗?如在

grep -i -c  -o pattern file

这将为您节省wc

管道输出

sum="value * ( $result )"

通过bc。那不会产生输出。你可能想要

sum=$(echo "183276 * $result" | bc)

echo $sum

答案 1 :(得分:0)

您只能使用Bash

执行此操作
#!/bin/bash
result=$(grep -io "$word" "$file" | wc -l)
sum=$((value*result))
echo -e "$word founded $result times.\n$result * $value = $sum"

<强>输出

darby@Debian:~$ word='toyota'
darby@Debian:~$ file="$HOME/Scrivania/file"
darby@Debian:~$ value=7
darby@Debian:~$ result=$(grep -io "$word" "$file" | wc -l)
darby@Debian:~$ sum=$((value*result))
darby@Debian:~$ echo -e "$word founded $result times.\n$result * $value = $sum"
toyota founded 2 times.
2 * 7 = 14
darby@Debian:~$

或使用bc的单行解决方案

darby@Debian:~$ echo "$value * $(grep -io "$word" "$file" | wc -l)" | bc
14
darby@Debian:~$