awk:"没有足够的参数来满足格式字符串"脚本中的错误

时间:2016-12-16 21:49:56

标签: shell awk printf

我创建了一个脚本来从我们的Unix服务器获取数据,但是我收到了以下错误:

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 o 2端口号。

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

1 个答案:

答案 0 :(得分:3)

违规printf是:

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

格式字符串中有三个%s个序列,因此awk,<something else>之后需要$3。我想也许这是一个复制和粘贴错误。由于您只打印两个列标题,请尝试删除末尾的%-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,$3更改为id,port,$3以打印已保存的id,已保存port 1}}和正在进行的调用值($3)按顺序排列。