한 명령의 출력에서 ​​점이 포함된 숫자를 가져와 다른 명령에서 사용하는 방법은 무엇입니까?

한 명령의 출력에서 ​​점이 포함된 숫자를 가져와 다른 명령에서 사용하는 방법은 무엇입니까?

한 명령의 출력에서 ​​점이 포함된 숫자를 가져와 다른 명령에서 사용하는 방법은 무엇입니까?

예를 들어, 이 명령은

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

답변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)

관련 정보