2016-12-16 104 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提到,请你编辑我提到的脚本,以便我知道错误在哪里,你做了什么改变?这将是你的非常大的青睐吗?顺便说一句,这是列...再次感谢你 –