あるコマンドの出力からドットを含む数値を取得し、別のコマンドで使用する方法は?
たとえば、このコマンドは
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)