Sort tags in an xml file


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Sort tags in an xml file
# 1  
Old 03-04-2015
Question Sort tags in an xml file

Hi All,

Below is an extract from xml. Here the pattern of the tags is not uniform.
i.e., For user A --> name,id,add isthe series
For user B --> id,name,add is the series

Code:
<name>A<\name>
<id>A1<\id>
<add>A2<\add>
<id>B1<\id>
<name>B<\name>
<add>B2<\add>
<add>C2<\add>
<id>C1<\id>
<name>C<\name>

Now is there any way to sort the tags with respect to the tags for each user.

i.e.,

Code:
<name>A<\name>
<id>A1<\id>
<add>A2<\add>
<name>B<\name>
<id>B1<\id>
<add>B2<\add>
<name>C<\name>
<add>C2<\add>
<id>C1<\id>

Is it possible to do this?
Kindly advice me..
# 2  
Old 03-04-2015
The sort command cannot exactly sort on a field with different > and < delimiters and variable field length, but the following produces a consistent order:
Code:
sort -t '>' -k2 file

or
Code:
sort -t '>' -k2r file

---------- Post updated at 03:42 PM ---------- Previous update was at 03:34 PM ----------

The following does exactly what you want.
sed changes the first > to a <
then sort works on a < delimited field
then sed changes the (2nd) < back to a >
Code:
sed 's/>/</' file | sort -t '<' -k3,3 | sed 's/</>/2'

# 3  
Old 03-04-2015
Hi.

The utility msort allows multiple field delimiters:
Code:
#!/usr/bin/env bash

# @(#) s1	Demonstrate multiple field delimiters, msort.

# Utility functions: print-as-echo, print-line-with-visual-space, debug.
# export PATH="/usr/local/bin:/usr/bin:/bin"
LC_ALL=C ; LANG=C ; export LC_ALL LANG
pe() { for _i;do printf "%s" "$_i";done; printf "\n"; }
pl() { pe;pe "-----" ;pe "$*"; }
db() { ( printf " db, ";for _i;do printf "%s" "$_i";done;printf "\n" ) >&2 ; }
db() { : ; }
C=$HOME/bin/context && [ -f $C ] && . $C msort

FILE=${1-data1}

pl " Input data file $FILE:"
cat $FILE

pl " Results:"
msort -l -q -j -un -d"<>" -n2 -c "lexicographic" $FILE

exit 0

producing:
Code:
$ ./s1

Environment: LC_ALL = C, LANG = C
(Versions displayed with local utility "version")
OS, ker|rel, machine: Linux, 2.6.26-2-amd64, x86_64
Distribution        : Debian 5.0.8 (lenny, workstation) 
bash GNU bash 3.2.39
msort 8.44

-----
 Input data file data1:
<name>A<\name>
<id>A1<\id>
<add>A2<\add>
<id>B1<\id>
<name>B<\name>
<add>B2<\add>
<add>C2<\add>
<id>C1<\id>
<name>C<\name>

-----
 Results:
<name>A<\name>
<id>A1<\id>
<add>A2<\add>
<name>B<\name>
<id>B1<\id>
<add>B2<\add>
<name>C<\name>
<id>C1<\id>
<add>C2<\add>

See option descriptions at https://www.unix.com/man-page/debian/1/msort/

This has the advantage of passing over the file only once, but the sort itself is slower than GNU sort.

Best wishes ... cheers, drl
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

How to pull multiple XML tags from the same XML file in Shell.?

I'm searching for the names of a TV show in the XML file I've attached at the end of this post. What I'm trying to do now is pull out/list the data from each of the <SeriesName> tags throughout the document. Currently, I'm only able to get data the first instance of that XML field using the... (9 Replies)
Discussion started by: hungryd
9 Replies

2. Shell Programming and Scripting

Extract the specific tags in a XML file

Hello Shell Gurus, I have a requirement to get the specific tags from a XML file. Here is my code snippet <jdbc-system-resource> <name>SDPData Source</name> <target>AdminServer,osb_server1,soa_server1</target> ... (30 Replies)
Discussion started by: Siv51427882
30 Replies

3. Shell Programming and Scripting

How to get distinct Tags from an XML file?

Sample XML file: <?xml version="1.0" encoding="UTF-16" ?> <Provider PROVIDER="xx" SCHEMA_VERSION="2.5"> <Institution UNINUM="xxxx" EXTRACT_DATE="2013-12-31" CUSTOMER_ROW_COUNT="1577" LOAN_ROW_COUNT="3322" BOOK_VALUE_DOLLARS="720163381.46"> <Customer CIF="dww213">... (11 Replies)
Discussion started by: Ariean
11 Replies

4. Shell Programming and Scripting

Split XML file based on tags

Hello All , Please help me with below requirement I want to split a xml file based on tag.here is the file format <data-set> some-information </data-set> <data-set1> some-information </data-set1> <data-set2> some-information </data-set2> I want to split the above file into 3... (5 Replies)
Discussion started by: Pratik4891
5 Replies

5. Shell Programming and Scripting

How to add Xml tags to an existing xml using shell or awk?

Hi , I have a below xml: <ns:Body> <ns:result> <Date Month="June" Day="Monday:/> </ns:result> </ns:Body> i have a lookup abc.txtt text file with below details Month June July August Day Monday Tuesday Wednesday I need a output xml with below tags <ns:Body> <ns:result>... (2 Replies)
Discussion started by: Nevergivup
2 Replies

6. Shell Programming and Scripting

Perl : to split the tags from xml file

I do have an xml sheet as below where I need the perl script to filter only the hyperlink tags. <cols><col min="1" max="1" width="30.5703125" customWidth="1"/><col min="2" max="2" width="7.140625" bestFit="1" customWidth="1"/> <col min="3" max="3" width="32.28515625" bestFit="1"... (3 Replies)
Discussion started by: scriptscript
3 Replies

7. Shell Programming and Scripting

Shell Command to compare two xml lines while ignoring xml tags

I've got two different files and want to compare them. File 1 : HTML Code: <response ticketId="944" type="getQueryResults"><status>COMPLETE</status><description>Query results fetched successfully</description><recordSet totalCount="1" type="sms_records"><record... (1 Reply)
Discussion started by: Shaishav Shah
1 Replies

8. Shell Programming and Scripting

How to add the multiple lines of xml tags before a particular xml tag in a file

Hi All, I'm stuck with adding multiple lines(irrespective of line number) to a file before a particular xml tag. Please help me. <A>testing_Location</A> <value>LA</value> <zone>US</zone> <B>Region</B> <value>Russia</value> <zone>Washington</zone> <C>Country</C>... (0 Replies)
Discussion started by: mjavalkar
0 Replies

9. Shell Programming and Scripting

Removing unwanted tags from xml file

I have a XML file given as below: "<ProductUOMAlternativeDetails> <removetag> <UOMCode>EA</UOMCode> <numeratorForConversionToBaseUOM>1</numeratorForConversionToBaseUOM> <denominatorForConversionToBaseUOM>1</denominatorForConversionToBaseUOM> <length>0.59</length> <width>0.96</width> ... (3 Replies)
Discussion started by: vikingh
3 Replies

10. UNIX for Dummies Questions & Answers

Search for xml tags in a file

Hi, I need to search for a pattern like : <A:UserAttr Name="ACTIVITY_ID"> <A:Value>1111120</A:Value> </A:UserAttr> Let us the there is a dir /tmp that contains 5 xml file. each of them multiple above tags in the file. If found all the three line would be... (2 Replies)
Discussion started by: tictactoe
2 Replies
Login or Register to Ask a Question