[英]Generate an XML file in Delphi 10.1 and perform basic XML operations?
[英]How to perform arithmetic operations on an xml file in awk
如果文件中有列,则可以轻松进行算术运算。 但是,如果您想读取xml文件,请以算法方式修改特定的标签,然后将更改写入相同的标签。
以下面的代码段为例:
<product>
<programname>Bla</programname>
<programurl>blah.com</programurl>
<catalogname>beep it</catalogname>
<lastupdated>ridiculous</lastupdated>
<name>Another pile of garbage</name>
<keywords>whatever</keywords>
<description>random</description>
<currency>USD</currency>
<price>3.99</price>
<buyurl>deeplyrandomurl.html</buyurl>
</product>
<product>
<programname>nowheretownthing</programname>
<programurl>sick.com</programurl>
<catalogname>beep it</catalogname>
<lastupdated>ridiculous</lastupdated>
<name>Another pile of garbage</name>
<keywords>whatever</keywords>
<description>random</description>
<currency>USD</currency>
<price>10.78</price>
<buyurl>deeplyrandomurl.html</buyurl>
</product>
让一个庞大的xml文件中有许多这样的<product>
块。 我们将如何修改每个<price>
子标签并将更改写入文件? 有什么建议么?
使用p.awk
作为awk
程序:
p.awk
{
if ($L ~ /\<price>/)
{
split($L,a,">");
split(a[2],b,"<");
gsub(">.*<",">"2*b[1]"<",$L);
}
print $L
}
然后
cat file | awk -f p.awk
如果您想使用sed,这是一个可能的解决方案。 您在bash脚本(例如script.sh)中编写以下代码:
#!/bin/bash
tr '\n' ';' < XMLFILE > TEMPFILE
c=1
for i in $(sed -n 's/.*price>\([0-9]*\.*[0-9]*\)<\/price>/\1/p' XMLFILE); do
i=$(awk -v i="$i" 'BEGIN{print (i*2)}')
sed -i "s/<price>\([0-9]*\.*[0-9]*\)<\/price>/<price>$i<\/price>/$c" TEMPFILE
c=$((c+1))
done
tr ';' '\n' < TEMPFILE > XMLFILE
rm -f TEMPFILE
然后,您只需执行脚本:
./script.sh
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.