我编写了一个awk/shell脚本来处理输入xml文件并输出具有所需元素的另一个xml文件。虽然这个脚本可以工作,但我想简化它,以便我不使用任何临时文件,而是在命令之间传输输出。 这是脚本。按顺序链接多个awk命令和shell脚本
#extract elements
awk 'BEGIN {FS="[<|>]"} /(elementname).*$/{matchingstring=$0}
{ printf "%s\n", matchingstring}' input.xml > tmp.xml
#sort, uniq, append closing tag (/>)
for i in `cat tmp.xml | awk '{print $2}' |sort | uniq `; do grep -m 1 $i tmp.xml;
done | sort -r | sed "s/>$/\/>/" > tmp2.xml
# Append xml header and root element
awk 'BEGIN {
FS="[<|>]"}
NR==1{
print "<?xml version=\"1\.0\" encoding=\"UTF\-8\"?>"
print "<listofelements>"
};
{ printf "%s\n", $0 }
END { print "</listifelements>";}' tmp2.xml > final.xml
任何输入将不胜感激。
这将是有益的,如果你给任何样本输入和输出,并expalin你在“#sort,uniq,附加结束标记(/>)打算做什么” – Vijay
在排序,uniq部分,我简单地排序通过xml元素名称,并获取元素的唯一列表,因为提取后有多个重复项。下面是第一步输入后的示例 - – Afs