Hello folks
I want to extract data between certain tag in XML file using 'sed'
<xml>
.........
..........
<one>XXXXXXXXXXXXXXXXXXXX</one>
......
Anyone ?Thank you
Hello folks
I want to extract data between certain tag in XML file using 'sed'
<xml>
.........
..........
<one>XXXXXXXXXXXXXXXXXXXX</one>
......
Anyone ?Thank you
typeset -i mCnt
mFlag='N'
while read mLine
do
mCnt=`echo $mLine | egrep -c '<one>'`
if [ $mCnt -ne 0 ]; then
mFlag='Y'
fi
if [ "$mFlag" = "Y" ]; then
mOutLine=`echo $mLine | sed 's:<one>::;s:</one>::'`
if [ "$mOutLine" != "" ]; then
echo $mOutLine
fi
fi
mCnt=`echo $mLine | egrep -c '</one>'`
if [ $mCnt -ne 0 ]; then
mFlag='N'
fi
done < input_file
Could you please post more appropriate input and output ?
<MiniTable id="BrowserMiniTable">
<Row>
<Value>66.17%</Value><Key>InternetExplorer</Key>
</Row>
<Row>
<Value>27.39%</Value><Key>Firefox</Key>
</Row>
</MiniTable>
<MiniTable id="ConnectionTable">
<Row>
<Value>4.56</Value><Key>InternetExplorer</Key>
</Row>
<Row>
<Value>4.23</Value><Key>Firefox</Key>
</Row>
</MiniTable>
------------------------------------------------------------------
There are many <MiniTable> but I wanted only first one i.e. <MiniTable id="BrowserMiniTable"> 's content only in following form---
OUTPUT:
Browser----%
InternetExplorer----66.17
Firefox----27.39
Thanks dude
Pujansrt,
Now you learned how important it is to follow the rules:
The solution that I gave works with your first requirement.
sed -n "/BrowserMiniTable/,/MiniTable/s/<Value>\([^%]*\)%*<\/Value><Key>\(.*\)<\/Key>/\2-----\1/p" filename
Thank you anbu23 your code is absolutely working.
This works when XML is organized. But when XML is not organize then I can not get result. for example:
<MiniTable id="BrowserMiniTable"><Row><Value>66.17%</Value><Key>InternetExplorer</Key>
</Row><Row><Value>27.39%</Value><Key>Firefox</Key>
</Row></MiniTable>
<MiniTable id="ConnectionTable"><Row><Value>4.56</Value><Key>InternetExplorer</Key></Row><Row><Value>4.23</Value><Key>Firefox</Key></Row></MiniTable>
--------------------
tr -d '\n' < browser.xml |
awk '
BEGIN { RS="<" };
/BrowserMiniTable/,/\/MiniTable/ {
field1 = tolower($1);
if (field1 ~ /^value>/) {
value = substr($1, 7)
sub(/%.*/, "", value)
}
else if (field1 ~ /^key>/)
browser = substr($1, 5)
else if (field1 ~/^\/row/) {
print browser, value;
browser = value = "";
}
else if (field1 ~ /^\/minitable/)
exit;
}
'
Output for your input sample :
InternetExplorer 66.17
Firefox 27.39