我正在寻找一个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'
。
答案 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程序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