我创建了一个脚本来从我们的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 |
|-------------------|-----------------|------------------|
答案 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
)按顺序排列。