Shell-Script
如何從一個命令的輸出中獲取包括點在內的數字並將其用於另一個命令?
如何從一個命令的輸出中獲取包括點在內的數字並將其用於另一個命令?
例如,這個命令
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
不確定如何正確使用它們。
由於您只有一個
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:
。請注意,這種方法之所以簡單,是因為“鍵”是一個連續的字元串,在這種特殊情況下沒有“內部”空格。- 結果,
$( ... )
用於-a
選項的“值”被替換0.192267662015
為上述範例。由於這涉及金融交易,因此請務必
$( ... )
在執行任何不可恢復的操作之前測試內部命令(在 內部)。如果您想更改位數,您可以使用
printf
而不是awk '$1=="-Spendable:"{printf "%.4f\n",$2}'