2017-11-10 2 views
-1

3 명령을 실행하고 일부 백분율 계산이 필요하고 예제와 같이 표시 할 변수를 출력하려고합니다. 이 스크립트로 실행할 수 있습니다.awk num 함수 오류

명령을 실행하는 호스트에 데이터를 저장할 수 없습니다. 내 스크립트는 원격 시스템에서 실행되며 원격 호스트에서 실행되고 데이터는 다시 로컬 시스템에 저장됩니다. 이 작업을 수행하기위한 가능한 접근 방법이 있습니까?

첫 번째 명령 출력

$ 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

을 정상화하는 정보가 필요합니다 경우 크기

$ NF + 0 AWK 성가신 뒤에 'T'**주의를 제거하도록하려면 awk에 관한 것, 모든 불필요한 것들을 제거하십시오. 'isi status -q |의 결과를 저장하십시오. grep -e "^ Size"-e "^"-e "^ Avail"을 파일에 사용합니다. 그 파일을 awk 명령에 여전히 문제가있는 곳에서 가능한 한 작게 만드십시오 (한 줄?). awk 스크립트를 가능한 한 작게 만들어서 여전히 오류를 제공하십시오. 그때까지는 좋은 기회가 있습니다. 그러나 작은 입력, 작은 스크립트, 예상 결과 및 실제 결과를 게시하지 않으면 문제가 표시됩니다. – jas

+0

나는 이것을 여러 호스트에서 실행할 것이고 이제 출력을 파일에 저장할 수 있습니다 (허용되지 않음). 내 로컬 시스템에서이 스크립트가 존재하며이 스크립트를 호스트에서 실행하고 결과를 다시 파일로 가져올 것입니다. – Shanker

+0

@jas가 해결책이라고 말하지 않고 있습니다. 질문을하기 위해 [mcve]를 만드는 방법이 있습니다. 당신은'isi_whatever'의 결과물을 파싱하는 데 도움을 청하고 있습니다. 우리는 그 명령을 가지고 있지 않습니다. 그래서 우리는 출력을 알 수 있습니까?/awk에 대한 입력은 당신이 우리에게 보여주지 않는 것처럼 보입니까? "샘플 요구 사항"- 샘플 입력 또는 예상 출력이란 무엇입니까? 어느 것이 든 다른 것이 빠져 있습니다. 명확하지 않은 경우 [ask]를보십시오. –

답변

0

후에 나는 당신의 AWK 코드 일부 구문 문제가 생각합니다. IFS의로 ''당신이 쉘 + AWK

사용하여 주장하는 경우 여기에서 시작입니다 ('-F를') (뒤에 '-') 표준 입력에서

저장 입력 키 레이블에 의해 색인 배열 예 단위 변경 (예 : G로는) 당신이 질문하면

[stdin] | awk -F\: '{a[$1]=($NF+0)} END{ ... grind stats here ...}' -