bash 中列表的数学运算

Math operation on list in bash

我在 bash 的列表中有一个数字列表:

bb=" 1 3 6 7 12 14 16 21 27 29 32 35 39 42"

我想对其应用数学运算(add/subtract/divide/multiply 此列表的每个项都有一个数字)。如何使用 bash?

执行此操作

使用前面介绍的bb的例子:

我试过这个:awk '{for(i=1;i<=NF;i++){$i=1+$i}}END{print [=15=]}' <<< $bb 但是 [=16=] returns 只有原始记录而不是修改后的记录。

通过awk加法,

$ bb=" 1 3 6 7 12 14 16 21 27 29 32 35 39 42"
$ awk '{for(i=1;i<=NF;i++){$i=1+$i}}1' <<< $bb
2 4 7 8 13 15 17 22 28 30 33 36 40 43

乘法

$ awk '{for(i=1;i<=NF;i++){$i=5*$i}}1' <<< $bb
5 15 30 35 60 70 80 105 135 145 160 175 195 210

您可以使用循环:

for num in $bb ; do
    results+=( $(( num + 1 )) )
  # results+=( $(( num * 5 )) )
done
echo "${results[@]}"

可以 使用 bash 算术运算,在编写 bash 函数后,你在 bash feed 中输入元素您的列表,您可能会用很多工具将其拆分。

不过说真的,bash 不是算术工具。在现代系统中,有大量可用的脚本语言,没有理由不使用它们。

例如:

 python -c "print sum([int(substring) for substring in '$bb'.split(' ')])"

如果你想使用 python 单线;您当然可以只编写 python 程序并使用数量惊人的库。我发现自己经常从 shell 脚本开始,然后弄清楚对其他可执行文件的(有意的)调用只占代码的一小部分,大部分事情可以在 [=24= 中更好地完成] 语言,然后用 python 的更少行重写内容。

编辑:您想计算 PDF 中的页数:

#!/usr/bin/python
import poppler
doc = poppler.document_new_from_file("file:///home/guuk/document.pdf","")
print doc.get_n_pages()