name;num_tel;num_fixe;id_client;num_comd;email;city;date_liv
gwenael;0998452223;1038431234;50C;12345;gwa@yahoo.fr;London;08/07/2015
judith;0954674487;1045227937;23D;78965;judith@yahoo.fr;Toulouse;11/05/2015
从这个csv我使用awk命令输出这个xml。 我需要2个问题的帮助。 标签名称(名称; num_tel; num_fixe; id_client; num_comd; email;)是csv的默认值 和city;在用户生成csv之前已经添加了date_liv,他们可以在默认标记之后添加更多标记。 我的目标是输出我的xml中的所有选项标签,一旦它们在csv中输入 我尝试使用循环,但我有很多错误,我需要帮助做到这一点。 我从第7位开始,因为可选标签从那个位置开始直到结束。
NF==1 for (i=7;i<=NF;i++)
{
printf " <option>%s</option>\n"
printf " <val>%s</val>\n"
}
其次,如何在我的awk脚本中将例如nummple num_tel的标签重命名为手机?
<rows>
<C>
<client>
<identity>
<name> gwenael </name>
<M>
<num_fixe> 0998452223 </num_fixe>
<contact>
<cell phone>1038431234 </cell phone> <!--num_tel--!>
</contact>
<option>city</option>
<value>London </value>
<option>date_liv</option>
<value>08/07/2015</value>
<num_comd> 12345</num_comd>
</M>
</identity>
<date_liv>08/07/2015</date_liv>
<locomotion>car</locomotion>
</client>
</C>
<D>
<pro>
<identity>
<name> judith </name>
<id_client>23D</id_client>
<option>city</option>
<value>Paris </value>
<option>date_liv</option>
<value>08/05/2015</value>
<num_fixe> 0998452223 </num_fixe>
<company>
<num_fixe>1045227937</num_fixe>
</company>
<num_comd> 12345</num_comd>
</identity>
<date_liv>08/07/2015</date_liv>
<locomotion>car</locomotion>
</pro>
</D>
答案 0 :(得分:1)
关注将自定义字段添加到输出的问题,您可以使用类似的东西。您需要在适当的位置将这些部分插入到脚本中:
# set field separator
BEGIN { FS=";" }
# first line
NR == 1 {
for (i=7; i<=NF; ++i) a[i] = $i # store field headers in array a
next # skip to next line
}
# all other lines
{
# print values along with the matching name from the array
for (i=7; i<=NF; ++i) printf "<option>%s</option><value>%s</value>", a[i], $i
}
您所需的输出格式不清晰,因此我没有在代码中使用任何格式字符,但您可以在循环中的每个<option>
- <value>
对之后添加换行符使用内置的ORS
(输出记录分隔符)变量:
printf "<option>%s</option><value>%s</value>%s", a[i], $i, ORS
使用ORS
而不是\n
的优点是它与平台无关,这意味着代码应该适用于在Windows中使用DOS行结尾或在其他系统上使用UNIX行结尾的文件。