Shell 使用awk生成xml
我正在尝试使用awk生成xml,如下所示。输入文件:Shell 使用awk生成xml,shell,awk,Shell,Awk,我正在尝试使用awk生成xml,如下所示。输入文件: 10.112.232.34|bl|1 10.23.435.21|bl|1 34.4532.32.1|bl|0 预期的输出应该是 <Update version="1"> <BlackListed_IP> <Added> <value IP="180.104.243.1" CODE="BL"></value>
10.112.232.34|bl|1
10.23.435.21|bl|1
34.4532.32.1|bl|0
预期的输出应该是
<Update version="1">
<BlackListed_IP>
<Added>
<value IP="180.104.243.1" CODE="BL"></value>
<value IP="180.104.243.1" CODE="BL"></value>
</Added>
<Deleted>
<value IP="180.104.243.1" CODE="BL"></value>
</Deleted>
</BlackListed_IP>
$cat tst.awk
开始{FS=“[|]”
$3==1{addedIp[++numAdded]=1;addedCode[numAdded]=2;next}
{deletedIp[++numDeleted]=$1;deletedCode[numDeleted]=$2}
结束{
printf“\n”,更新\u版本
打印“”
打印“”
对于(i=1;i
IP=“10.23.435.21”CODE=“BL”>
IP=“34.4532.32.1”CODE=“BL”>
我建议使用。请参见:++ve获取好代码,先生,您准备好从SO处购买衬衫了:)我相信他们会提供10万英镑回购,干杯。
function prepere_xml{
while IFS='' read -r line || [[ -n "$line" ]];
do
while IFS='|' read f1 f2 f3
if [ "$f3" == 1 ]; then
awk -v c="$line" -F\| 'BEGIN{printf "<Update version=\"%s\">\n <BlackListed_IP>\n <Added>\n", c} {printf " <value IP=\"%s\" CODE=\"%s\"></value>\n", $1, $2} END {printf " </Added>\n </BlackListed_IP>\n</Update>"}' $collect_sid_msg > Generated_Delta.xml
else
awk -v c="$line" -F\| 'BEGIN{printf " <Deleted>\n", c} {printf " <value IP=\"%s\" CODE=\"%s\"></value>\n", $1, $2} END {printf " </Deleted>\n</Update>"}' $collect_sid_msg >> Generated_Delta.xml
fi
done<$input_file
done < $update_version
}
1
$ cat tst.awk
BEGIN { FS="[|]" }
$3 == 1 { addedIp[++numAdded]=$1; addedCode[numAdded]=$2; next }
{ deletedIp[++numDeleted]=$1; deletedCode[numDeleted]=$2 }
END {
printf "<Update version=\"%d\">\n", update_version
print " <Blacklisted_IP>"
print " <Added>"
for (i=1; i<=numAdded; i++) {
printf " <value> IP=\"%s\" CODE=\"%s\"></value>\n", addedIp[i], toupper(addedCode[i])
}
print " </Added>"
print " <Deleted>"
for (i=1; i<=numDeleted; i++) {
printf " <value> IP=\"%s\" CODE=\"%s\"></value>\n", deletedIp[i], toupper(deletedCode[i])
}
print " </Deleted>"
print " </Blacklisted_IP>"
}
$ awk -v update_version=1 -f tst.awk file
<Update version="1">
<Blacklisted_IP>
<Added>
<value> IP="10.112.232.34" CODE="BL"></value>
<value> IP="10.23.435.21" CODE="BL"></value>
</Added>
<Deleted>
<value> IP="34.4532.32.1" CODE="BL"></value>
</Deleted>
</Blacklisted_IP>