【发布时间】:2016-04-05 09:16:39
【问题描述】:
目的是基于平面文件,使用awk生成XML文件。 我设法通过纯编码来做到这一点。 (打印“..等。 但我想通过使用 printf fmt 来获得更 awk 的方式。
输入文件(有更多类似的行) - 我没有提到标题行(标题:映射条目内存)。
Mapone 5 10
Maptwo 12 45
Maptree 8 7
结果文件应该是这样的:
<Map>Mapone</Map>
<entries>5</entries>
<mem>10</mem>
<Map>Maptwo</Map>
<entries>12</entries>
<mem>45</mem>
<Map>Maptree</Map>
<entries>8</entries>
<mem>7</mem>
目前我使用
BEGIN {FS=" " ;
print "<?xml version=\"1.0\"?>";
}
{ Map = $1; }
{ Entry = $2;}
{ mem = $4;}
{
fmt = fmt "\t<Mapname>%s</Mapname>\n";
fmt = fmt "\t\t<Entries>%s</Entries>\n";
fmt = fmt "\t\t<Mem>%s</Mem>\n";
printf fmt, Map, Entry, mem ;
}
===> 这个脚本导致错误包含 "awk: printf 语句中没有足够的参数"
【问题讨论】:
-
您的
printf语句应该类似于printf "%s %s %s %s", fmt, Map, Entry, mem ;。你错过了。 -
你永远不会清除 fmt,所以在第一行之后它有太多的参数。要么清除它,要么在 END 语句中打印一次
-
@fedorqui 这也会失败,因为他们使用
fmt作为格式,所以在你的例子中不需要第一位 -
@123 哦,对,你是对的。我不知道可以给
printf加上所有占位符的字符串。