Shell-Script

如何從一個命令的輸出中獲取包括點在內的數字並將其用於另一個命令?

  • October 14, 2022

如何從一個命令的輸出中獲取包括點在內的數字並將其用於另一個命令?

例如,這個命令

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不確定如何正確使用它們。

由於您只有一個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而不是print使用“知名”格式選項,例如:

awk '$1=="-Spendable:"{printf "%.4f\n",$2}'

引用自:https://unix.stackexchange.com/questions/720964