2016-12-16 146 views
-1

「沒有足夠的論據,以滿足格式字符串」的錯誤我創建了一個腳本,從我們的Unix服務器獲取數據,但我得到了以下錯誤:AWK:腳本

awk: cmd. line:8: (FILENAME=- FNR=2) fatal: not enough arguments to satisfy format string 
    `|%-17s|%-16s|%-15s|' 
        ^ran out for this one 

下面是完整的腳本:

#!/bin/sh 
export TERM=xterm 
ipath=/usr/local/nextone/bin 
date=$(date +"%Y%m%d%H%M") 
ifile="$(date '+/var/EndpointUsage_%I-%M-%p_%d-%m-%Y.csv')" 
"$ipath"/cli iedge list | awk ' 
BEGIN { print "|-----------------|------------------|------------------|"; 
printf "|%-18s|%-17s|%-16s|\r\n","Registration ID", "Port", "Ongoing Calls" 
} 
/Registration ID/ { id = $3; next } 
/Port/ { port = $3 ; next } 
/Ongoing Calls/ {print "|-------------------|-----------------|------------- -----|"; 
printf "|%-18s|%-17s|%-16s|\r\n",id,port,$3 } 
END{ 
print "|------------------|------------------|------------------|"; 
}'>> "$ifile" 

任何人都可以請幫助我,我該如何解決這個錯誤?

更改後列顯示正確,但Port列沒有任何數據。它應該有0或者其他端點有1個2端口號。

|-----------------|------------------|------------------| 
|Registration ID |Port    |Ongoing Calls | 
|-------------------|-----------------|------------------| 
|-------------------|-----------------|------------------ 
|CC_XXXXXX_01_0  |     |174    | 
|-------------------|-----------------|------------------| 
+3

你問了一個問題,你得到了[答案](http://stackoverflow.com/a/41192985/1745001)。現在你已經遇到了你的下一個問題,你已經改變了你的問題,直到它與你的原始問題和相關答案無關,並且現在正在尋求這個完全不同的新問題的幫助。不要這樣做。把這個問題放回到它的開始,標記你接受的答案,併發佈一個新的問題,如果你必須,但首先要自己解決它。 –

+3

我同意@EdMorton。問一個不同的問題實際上會更好,鏈接到這個問題,以便未來的讀者能夠從特定問題的特定答案中受益。查看[tour](https://stackoverflow.com/tour)以獲取更多有用的提示。另外,在您的新問題中,請顯示輸入文件,代碼,輸出結果以及您期望的輸出結果 - 這樣您可以更快速地獲得更高質量的答案。謝謝! – cxw

回答

3

的違規printf是:

printf "|%-18s|%-17s|%-16s|\r\n",id,$3 
             ^^^^ awk wants to see a third parameter here 

你必須在格式字符串3個%s序列,所以awk$3後預計,<something else>。我想也許這是一個複製和粘貼錯誤。由於您只打印兩列標題,因此請嘗試在最後刪除%-16s|,並查看是否能爲您提供期望的輸出。

編輯沒有看到您的輸入文件,我不知道。試試這個,雖然 -

/Registration ID/ { id = $3; next } 
/Port/ { port = $3 ; next } 
/Ongoing Calls/ {print "|-------------------|-----------------|------------------|"; 
printf "|%-18s|%-17s|%-16s|\r\n",id,port,$3 } 

我加{port=$3;next}保存的端口號,然後當你打印出來,我改id,$3id,port,$3打印保存id,保存port,和正在進行的通話值($3 ) 爲了。

+0

@EdMorton嗨,我很抱歉..我在這方面很新穎,我沒有得到那種擔心,我只是想學習它,並想知道我在上面的腳本中的錯誤在哪裏。 –

+0

@cxw非常感謝您的回覆,我想我錯過了第三排,當我粘貼時,實際上我想要3排,一個是註冊ID,端口和持續呼叫,我也更新了腳本。 –

+0

@EdMorton嗨莫頓,非常感謝您的幫助,對不起,我沒有得到答案cxw提到,請你編輯我提到的腳本,以便我知道錯誤在哪裏,你做了什麼改變?這將是你的非常大的青睞嗎?順便說一句,這是列...再次感謝你 –