shell 网络抓取中的算术

Arithmetic in web scraping in a shell

所以,我这里有示例代码:

#!/bin/bash
clear

curl -s  https://www.cnbcindonesia.com/market-data/currencies/IDR=/USD-IDR |
html2text |
sed -n '/USD\/IDR/,$p' |
sed -n '/Last updated/q;p' |
tail -n-1 |
head -c+6 && printf "\n"

exit 0

这应该打印出一些数字范围 14000~15000

让我们从最基本的开始,我必须做什么才能打印 result + 1?因此,如果打印输出为 14000 并将其递增到 1,则变为 14001。我认为 html2text 的结果不可计算,因为它应该类似于字符串输出而不是整数。

我想知道的更高级的事情是如何计算2个curl结果的结果?

我会做什么, + :

$ num=$(xidel -se '//div[@class="mark_val"]/span[1]/text()' 'https://url')
$ num=$((${num//,/}+1)) # num was 14050
$ echo $num 

输出

14051

解释

$((...))

是算术代入。完成算术运算后,整个内容将替换为表达式的值。参见 http://mywiki.wooledge.org/ArithmeticExpression

命令替换:"$(cmd "foo bar")" 导致使用参数 'foo bar' 执行命令 'cmd',并且“$(..)”将被替换为 输出。参见 http://mywiki.wooledge.org/BashFAQ/002 and http://mywiki.wooledge.org/CommandSubstitution

奖金

您可以直接使用 , thanks Reino using 语法计算:

$ xidel -s <url> e 'replace(//div[@class="mark_val"]/span[1],",","") + 1' 

并进行 2 个值的加法运算:

$ xidel -s <url> -e '
    let $num:=replace(//div[@class="mark_val"]/span[1],",","")
    return $num + $num
'