我正在尝试使用grep计算文本文件中单词的出现次数,然后使用bc将该结果(int)与小数相乘。但是,结果只是一个空白值(我猜是空字符串?)。
我计算文件中单词出现的方式是:
result=$(grep -i -o "$word" $file | wc -l)
然后我尝试通过(其中value
是小数)的结果进行浮点数学运算:
sum="value * ( $result )" | bc
然而在终端中,我只得到空白/空行作为结果,没有值或任何东西。我做错了什么?
答案 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:~$