如何在bash中评估一个数字的总和

时间:2015-04-29 09:43:05

标签: bash awk

我有一个天真的bash问题。

export A=`wc file.txt` 
export B=`echo $A[1] - 1 | bc`

问题是我无法评估$ A中的第一个元素。 我可以用awk

来做
echo $A | awk '{print $1}'

但是如果我将它插入上一个等式中它就不起作用。

也许有人有想法?

2 个答案:

答案 0 :(得分:4)

您要将变量$A设置为wc的输出。由于您显示$A[1],看起来您想要第二个值,即单词数,但是您在awk中使用$1,因此我认为您需要多行,{{1} } -l中的参数。

所以从现在开始,我想你想要使用线条。如果没有,只需使用wc而不是-l更改解决方案。

问题是-w输出了许多参数。如果您指定wc file-w,则会将其值与文件名一起获取。但是如果你像-l那样做间接,你只需要获得行数,这样你就不必清理输出。

这样,你可以这样做:

wc -l < file.txt

总之,您可能希望直接使用它,而无需存储中间值:

a=$(wc -l < file.txt)
b=$(echo "$a" -1 | bc)

或者,如果您想使用b=$(echo "$(wc -l <file.txt)" -1 | bc) ,您可以说:

awk

甚至可以使用awk -v lines="$(wc -l < file.txt)" 'BEGIN {print lines-1}' 执行计算,如suggested by JID

$(( ))

b=$(($(wc -l <file.txt) - 1 ))

答案 1 :(得分:0)

说,这个可能很好:

   export A=$(wc < file.txt)
   export B=$(echo "$(echo $A | cut -d' ' -f1) - 1" | bc)

甚至

export B=$(echo "$(wc < file.txt | cut -d' ' -f1) - 1" | bc)

如果你不打算使用&#39; wc&#39;结果进一步。

&#39; wc&#39;命令打印换行符,字和字节计数器(参见手册页), 它们是空间分隔的,所以这里的切割就足够了。

如果你需要&#39; wc&#39;作为一个数组,你需要拆分它并写入一个预先声明的A&#39;手动排列。