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

Bash floating point arithmetic with bc giving blank result?

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

我计算文件中单词出现次数的方法是:

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

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

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

但是在终端中,我只得到 blank/empty 行作为结果,没有值或任何东西。我做错了什么?

您可以只使用 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:~$

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

grep -i -c  -o pattern file

这将为您节省 wc

你通过管道输出

sum="value * ( $result )"

到公元前。那不会产生输出。你可能想要

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

echo $sum