Generating XML from a flatfile


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Generating XML from a flatfile
# 1  
Old 07-03-2012
Generating XML from a flatfile

Hi all,

I am trying to generate an XML file from a flatfile in ksh/bash (could also use perl at a pinch, but out of my depth there!).

I have found several good solutions on this very forum for cases where the header line in the file forms the XML tags, however my flatfile is as follows:
Code:
Object,Type
Table1,Tables
Table2,Tables
Table3,Tables
View1,Views
View2,Views
Proc1,Procs
Proc2,Procs

And I want to create the following:

Code:
<Whatever>
 <Tables>
    Table1
    Table2
    Table3
 </Tables>
 <Views>
    View1
    View2
 </Views>
 <Procs>
    Proc1
    Proc2
 </Procs>
</Whatever>

So I essentially want the data to be segregated by one of the data columns in the flatfile, rather than just a more straightforward 'header becomes a tag' scenario.

All pointers much appreciated!

*Edit*


Although the data should always be in sequence of the different types, I would be interested to see if it could handle:

Code:
Object,Type
Table1,Tables
Proc1,Procs
View1,Views
Table2,Tables
Table3,Tables
View2,Views
Proc2,Procs

Thanks,
Ian

Moderator's Comments:
Mod Comment Video tutorial on how to use code tags in The UNIX and Linux Forums.

Last edited by ianmrid; 07-03-2012 at 09:41 AM.. Reason: Please use code tags for data and code samples, thank you
# 2  
Old 07-03-2012
Something like this:
Code:
awk -F\, 'ant!=$NF{if(ant!=""){print "</"ant">"};print "<"$NF">\n   "$1;ant=$NF;next}{print "   "$1}END{print "</"ant">"}' infile

This User Gave Thanks to Klashxx For This Post:
# 3  
Old 07-03-2012
hey, thanks for the quick response! It works perfectly for the ordered dataset.

Would it take much to adapt it to do the following:

1. Ignore a header line (i..e line 1)
2. Work with a non-ordered flatfile as per my edit above.

Even if not, this is great - would have taken me hours to come up with!
# 4  
Old 07-03-2012
Code:
$ cat flat2xml.awk

BEGIN { FS="," }
NR==1 { next }

{       D[$2,++T[$2]]=$1        }

END {
        print "<whatever>";
        for(X in T)
        {
                print "\t<" X ">";
                        for(N=1; N<=T[X]; N++)  print "\t\t" D[X,N];
                print "\t</" X ">";
        }
        print "</whatever>";
}

$ awk -f flat2xml.awk data

<whatever>
        <Procs>
                Proc1
                Proc2
        </Procs>
        <Views>
                View1
                View2
        </Views>
        <Tables>
                Table1
                Table2
                Table3
        </Tables>
</whatever>

$

It doesn't need to handle more than 2 columns, does it?
This User Gave Thanks to Corona688 For This Post:
# 5  
Old 07-04-2012
No it doesn't, although they have decided the flatfile will have the two columns in the opposite order. Any suggestion on the tweak I need to make to the first script to make keep the output the same, but the input is Col2,Col1 instead of Col1,Col2?
# 6  
Old 07-04-2012
Switch $1 and $2 around Smilie
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Generating xml file from UNIX

i have a unix script which generates the csv file. the data in csv file is dynamic. how can i convert/move the data from csv file to xml. please suggest (1 Reply)
Discussion started by: archana25
1 Replies

2. Shell Programming and Scripting

Parsing a mixed format (flatfile+xml) logfile

I am trying to parse a file that looks like the below: There are thousands of lines like the above and the file is expected to run into hundreds of thousands. The issue i have is the mixed format of the file. If it was just an xmlfile, i would use an xmllint to parse the file. Now, i am... (11 Replies)
Discussion started by: goddevil
11 Replies

3. Shell Programming and Scripting

sending output to flatfile

Hi, I am writing one unix script to get row count of few tables into one sequential file my script is like this $ORACLE_HOME/bin/sqlplus -s <<EOF >output.txt userid/password@databasename set verify off set heading off set feedback off select count(*) count from tablel where ; select... (4 Replies)
Discussion started by: spmsarada
4 Replies

4. UNIX for Advanced & Expert Users

Delimeters Count in a FlatFile

Hi, I have the below script to check the count of delimeters for a file (here is File : test.csv Delimeter is ",") awk '{gsub(/"*"/,x);print gsub(/,/,x)}' test.csv And it return the output for each line as: 2 2 cat test.csv: abc,xyz "abc,zxyz",1 I need help one the below things: - IS... (8 Replies)
Discussion started by: venkatajay_18
8 Replies

5. Shell Programming and Scripting

Generating an xml having information related to files in the directory

Hi all, Have to generate an xml having information related to files in the directory Suppose i have file file1.xml (datafile) file2.xml (datafile) file3.xml (metafile) Now i need to generate an xml in the format >> <?xml version="1.0" encoding="UTF-8"?> <AuditFile Version="2.0">... (8 Replies)
Discussion started by: abhinav192
8 Replies

6. UNIX for Advanced & Expert Users

Generating XML from XSD

Hi all, Am looking for a way to generate XML based on XSDs so that the final XML need not be validated against the XSDs again. Here is the part of the XSD <xsd:element name="first_element"> <xsd:complexType> <xsd:sequence> <xsd:element name="val"/> </xsd:sequence> ... (0 Replies)
Discussion started by: matrixmadhan
0 Replies

7. Shell Programming and Scripting

Deleting column from a flatfile with delimiter

I have a set of flatfiles which have columns delimited by #. How can a particular column be deleted in all the flatfiles. All flatfiles have same number of columns. (5 Replies)
Discussion started by: rsprabha
5 Replies

8. Shell Programming and Scripting

Traverse a flatfile and check for errors

Hi, I need to check a flatfile for various parameters like length of the record, format of record, any tab character present in the record etc., for checking presence of tab character, i'm trying to use the following code and i'm not sure if the same is right. Pls Help. nawk '{print... (1 Reply)
Discussion started by: aravindc
1 Replies

9. UNIX for Dummies Questions & Answers

encrypting Unix flatfile

Hi, I am new to unix. I have a flat file that needs to be pgp encyrpted in ASCII format and ftped in Ascii format to remote location. Can any one tell me the steps involved in the pgp encryption of the unix file. I will really appreciate if any one can help me with the pgp encryption shell... (1 Reply)
Discussion started by: rkumar28
1 Replies

10. UNIX for Dummies Questions & Answers

Finding a column in a flatfile

I have a file which is fixed width columns. This is an offset buffer - rather than space or tab delimited. There are upto about 8 columns and I need to get all of the column 5's values into another file. The problem is that because the delimiter is a space - and some fields are blank - the 5th... (3 Replies)
Discussion started by: peter.herlihy
3 Replies
Login or Register to Ask a Question