あるコマンドの出力からドットを含む数値を取得し、別のコマンドで使用する方法は?

あるコマンドの出力からドットを含む数値を取得し、別のコマンドで使用する方法は?

あるコマンドの出力からドットを含む数値を取得し、別のコマンドで使用する方法は?

たとえば、このコマンドは

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出力には1つのセクションのみがあり、1つの行しかありませんSpendable

これを行うには、どのようにスクリプトを作成する必要がありますか?私はこれを期待していましたが、grepそれを正しく使用する方法がわかりませんsedでした。xargs

答え1

セクションが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最初のフィールドが()と等しい場合、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)

関連情報