使用shell命令进行货币解析和转换

时间:2013-02-10 10:29:14

标签: shell sed awk

我正在寻找一个shell单行程序,它将以下示例货币字符串 PHP10000 解析为 $ 245 。我需要解析字符串中的数字,将其与预设的转换因子相乘,然后在结果中添加“$”前缀。

到目前为止,我所拥有的仅是:

echo PHP10000 | sed -e 's/PHP//'

,结果为10000

现在,我一直坚持如何对该结果进行乘法运算。

我在想awk也可以给出解决方案,但我是shell命令的初学者。

更新

我试过了:

echo PHP10000 | expr `sed -e 's/PHP//'` \* 2

并且乘法仅适用于整数。我不能使用浮点数,因为它给了我这个错误:expr: not a decimal number: '2.1'

4 个答案:

答案 0 :(得分:2)

value=PHP10000
factor=40.82
printf -v converted '$%.2f' "$(bc <<< "${value#PHP} / $factor")"
echo $converted    # => $244.98
  • ${value#PHP}部分是parameter expansion,用于从$value字符串前面删除PHP字符串
  • <<<部分是bash here-string,因此您将公式传递给bc程序
  • bash不执行浮点运算,因此调用bc执行计算
  • printf -v varname相当于其他语言varname = sprintf(...)

答案 1 :(得分:1)

类似的东西:

echo PHP10000 | awk '/PHP/ { printf "$%.0f\n", .0245 * substr($1,4) }'

可以轻松扩展为转换为一种货币(称为报价货币)的多货币版本,例如:

awk '
BEGIN {
    rates["PHPUSD"]=.01
    rates["GBPUSD"]=1.58
}
/[A-Z]{3}[0-9.]+/ {
    pair=substr($1,1,3) "USD"
    amount=substr($1,4)
    print "USD" amount * rates[pair]
}
' <<EOF
PHP100
GBP100
EOF

输出:

USD1
USD158

答案 2 :(得分:1)

一种方式:

echo "PHP10000" | awk -F "PHP" '{ printf "$%d\n", $2 * .0245 }'

结果:

$245

或打印到两位小数:

echo "PHP10000" | awk -F "PHP" '{ printf "$%.2f\n", $2 * .0245 }'

结果:

$245.00

修改

Bash不支持浮点运算。请改用bc

echo "PHP10000" | sed 's/PHP\([0-9]\+\)/echo "scale=2; \1*.0245\/1" | bc/e'

结果:

245.00

答案 3 :(得分:0)

另一种选择:

$ echo "PHP10000" | awk 'sub(/PHP/,""){ print "$" $0 * .0245 }'
$245