如何从一个命令的输出中获取包含点的数字并在另一个命令中使用它?

如何从一个命令的输出中获取包含点的数字并在另一个命令中使用它?

如何从一个命令的输出中获取包含点的数字并在另一个命令中使用它?

例如,这个命令

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

如何编写脚本来执行此操作?我一直在期待grepsedxargs不确定如何正确使用它们。

答案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)

相关内容