如何从一个命令的输出中获取包含点的数字并在另一个命令中使用它?
例如,这个命令
chia wallet show -w standard_wallet
给出这个结果
Wallet height: xxxxxx
Sync status: Synced
Balances, fingerprint: xxxxxxx
Chia Wallet:
-Total Balance: 0.192267662015 xch (192267662015 mojo)
-Pending Total Balance: 0.192267662015 xch (192267662015 mojo)
-Spendable: 0.192267662015 xch (192267662015 mojo)
我想0.192267662015
从该Spendable
行取出数字以在另一个命令中使用,该命令将成为
chia wallet send -a 0.192267662015
Chia Wallet
输出中只有一节,并且只有一行Spendable
。
如何编写脚本来执行此操作?我一直在期待grep
,sed
但xargs
不确定如何正确使用它们。
答案1
由于您只有一个Wallet
部分,并且您想要使用该Spendable
金额,因此以下方法应该有效:
chia wallet send -a "$(chia wallet show -w standard_wallet | awk '$1=="-Spendable:"{print $2}')"
想法如下:
- 该
wallet send
命令通过以下方式接收其“金额”命令替换(即被$( ... )
所附命令的输出替换)。 - 所包含的命令是
wallet show
其输出通过管道传输到awk
程序进行文本处理的命令。 - 该
awk
程序将从命令接收到的行分割wallet show
成(连续)空白处的“字段”。$2
如果第一个字段等于,则它被设计为打印第二个字段 ( )-Spendable:
) 。请注意,这种方法之所以如此简单,只是因为在这种特殊情况下“Key”是一个没有“内部”空格的连续字符串。 - 因此,
$( ... )
用作选项的“值”-a
被替换0.192267662015
为上面示例的“值”。
$( ... )
由于这涉及金融交易,因此在执行任何不可恢复的操作之前,请务必测试内部命令(在 内部)。
如果您想更改位数,可以使用“众所周知”的格式选项printf
来代替并使用,例如:print
awk '$1=="-Spendable:"{printf "%.4f\n",$2}'
如果您想强制向下舍入,您可以截断字符串(根据 Ed Morton 的评论):
print ((p=index($2,".")) ? substr($2,1,p+3) : $2)