awk에서 여러 명령 출력을 변수로 얻는 방법

awk에서 여러 명령 출력을 변수로 얻는 방법

3개의 명령을 실행하고 일부 백분율 계산이 필요한 변수로 출력을 얻으려고 하며 예제와 동일하게 표시됩니다. 이것을 스크립트로 실행할 수 있습니까?

첫 번째 명령 출력

$ isi status -q | grep -e "^Size" -e "^Used" -e "^Avail"
Size:573T
Used:448.0T
Avail:74T

두 번째 명령 출력

$ isi_classic snapshot usage | tail -n 1 | awk '{printf "\t\t\tSnapshot USED %=%.1f%%\n", $4}'
     Snapshot USED =0.6%
$ isi_classic snapshot usage | tail -n -1 | awk '{ print "\t\t\tSnapshot USED:" $1}'
     Snapshot USED=3.2T

샘플 스크립트awk 스크립트가 작동하지 않습니다. 공간을 삭제한 후

# isi status -q | grep -e "^Size" -e "^Used" -e "^Avail" | awk 'function print (num)
pipe pipe quote> /Size:/ {TotalSize=$NF~}
pipe pipe quote> /Used:/ {TotalUsed=$NF}
pipe pipe quote> /Avail:/ {TotalAvail=$NF} }
pipe pipe quote> END {
pipe pipe quote>     used=TotalUsed/Total_Size*100
pipe pipe quote>     system("isi_classic snapshot usage | tail -n -1 | awk '{ print "Snapshot_used=" $1}'")
pipe pipe quote>     system("isi_classic snapshot usage | tail -n 1 | awk '{printf "Snapshot_per :%.1f\n", $4}'")
pipe pipe quote>     Usedw/o=Total Used-Snapshot USED/Total Size
pipe pipe quote>     print hostname ": " "\t","Total Size:" Total_Size
pipe pipe quote>     printf "\t\t\tTotalUsed:%.1f\n", TotalUsed, "TB"
pipe pipe quote>     printf "\t\t\tTotalAvail:%.1f\n", TotalAvail, "TB"
pipe pipe quote>     printf "\t\t\tTotalUsed %:%.1f\n", used, "TB"
pipe pipe quote>     printf "\t\t\tSnapshot Used :%.1f\n", Snapshot_used, "TB"
pipe pipe quote>     printf "\t\t\tSnapshot Used %:%.1f\n", Snapshot_per, "TB"
pipe pipe quote>     printf "\t\t\tUsed w/o:%.1f\n", Usedw/o, TB)'
awk: syntax error at source line 1
 context is
        function >>>  print <<<  (num)
        missing }
        missing )
awk: bailing out at source line 7

샘플 요청

Total Size      : 573 TB
Total Used      : 448.0 TB
Total Available : 74 TB
Total Used %    : 86.1 %   # Total Used(%) = Total Used/Total Size *100 = 86.1(%)
Snapshot Used   : 3.2 TB
Snapshot Used % : 0.6 %
Used w/o        : 85.5 %    # {(Total used)-(Snapshot used)} / (Total size) = 85.49%

답변1

원래 답변:

Totalanswer=$(command1 ; command2)
Subanswer1=$(echo $Totalanswer|grep Sub1)
Subanswer2=$(echo $Totalanswer|grep Sub2)
printf " Answer1:%s\n Answer2:%s\n" $Subanswer1 $SubAnswer2

코멘트 추가: 중요한 것은 올바른 도구를 사용하여 필요한 정보를 얻는 것입니다. 외부(즉, 기본이 아닌 쉘) 명령을 사용하는 것은 피해야 합니다. grep을 bash 네이티브로 교체(힌트)은 독자에게 연습 문제로 남겨 둡니다.

관련 정보