Xml to csv

Login or Register to Reply

 
Thread Tools Search this Thread
# 8  
Hi.

Use this version, s2:
Code:
#!/usr/bin/env bash

# @(#) s2       Demonstrate string extraction from XML file, xml2.

# 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 "$*"; }
em() { pe "$*" >&2 ; }
db() { ( printf " db, ";for _i;do printf "%s" "$_i";done;printf "\n" ) >&2 ; }
db() { : ; }
# C=$HOME/bin/context && [ -f $C ] && $C specimen xml2 grep awk tr dixf

FILE=${1-data1}
# E=expected-output.txt

pl " Sampled lines from data file $FILE:"
# specimen -n $FILE
head $FILE

# Look for a001, b203, and j151
pl " Results, warning message expected:"
xml2 < $FILE |
tee f1 |
grep -E '(a001|b203|j151)=' |
tee f2 |
awk -F/ '{print $NF}'|
tee f3 |
awk -F= '{print $2}'|
tee f4 |
tr '\n' '\t' ; echo ""

rm -f f?
exit 0

producing, by using your file name for data1 here:
Code:
$ ./s2 data1

Environment: LC_ALL = C, LANG = C
(Versions displayed with local utility "version")
OS, ker|rel, machine: Linux, 3.16.0-4-amd64, x86_64
Distribution        : Debian 8.7 (jessie) 
bash GNU bash 4.3.30
specimen (local) 1.17
xml2 - ( /usr/bin/xml2, 2012-04-16 )
grep (GNU grep) 2.20
awk GNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.2-p3, GNU MP 6.0.0)
tr (GNU coreutils) 8.23
dixf (local) 1.42

-----
 Sampled lines from data file data1:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE ONIXmessage SYSTEM "http://www.editeur.org/onix/2.1/short/onix-international.dtd" >
<ONIXmessage release="2.1">
<header><m174>Houghton Mifflin</m174><m175>Catherine Toolan 978-465-7755</m175><m283>eloquence@firebrandtech.com</m283><m182>20170201</m182><m183>Title information from Houghton Mifflin</m183><m184>eng</m184><m185>01</m185><m186>USD</m186><m187>in</m187><m193>General Trade</m193></header>
  <product>
    <a001>9781328740472</a001>
    <a002>02</a002>
    <a197>HMH</a197>
    <productidentifier>
      <b221>02</b221>

-----
 Results, warning message expected:
error: Extra content at the end of the document
9781328740472   Peepers 7.99    10.99

Best wishes ... cheers, drl

PS:
It looks like brew,fink,port have some version of xml2 for an old system like:
Code:
OS, ker|rel, machine: Apple/BSD, Darwin 9.8.0, Power Macintosh
Distribution        : Mac OS X 10.5.8 (leopard, workstation)


Last edited by drl; 03-13-2017 at 05:37 PM.. Reason: Add stuff foir Mac
# 9  
drysdalk - It will be a weekly task, and there are about 2.5M lines per file, so Excel would not be practical, unfortunately. Thanks, though!

---------- Post updated 03-14-17 at 07:13 AM ---------- Previous update was 03-13-17 at 09:10 PM ----------

dlr - Thanks again. Yes, I still have that issue with xml2 (line 24). Also, would there be an issue with commenting out

Code:
pl() { pe;pe "-----" ;pe "$*"; }

to eliminate the line break?

Code:
-----
 Sampled lines from data file zzz:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE ONIXmessage SYSTEM "http://www.editeur.org/onix/2.1/short/onix-international.dtd" >
<ONIXmessage release="2.1">
<header><m174>Houghton Mifflin</m174><m175>Catherine Toolan 978-465-7755</m175><m283>eloquence@firebrandtech.com</m283><m182>20170201</m182><m183>Title information from Houghton Mifflin</m183><m184>eng</m184><m185>01</m185><m186>USD</m186><m187>in</m187><m193>General Trade</m193></header>
  <product>
    <a001>9781328740472</a001>
    <a002>02</a002>
    <a197>HMH</a197>
    <productidentifier>
      <b221>02</b221>

-----
 Results, warning message expected:
./z: line 24: xml2: command not found

# 10  
As you didn't specify any restrictions on neither input (e.g. pattern repetitions) nor output structure (field ordering, multiple lines), this easy approach might be of some interest:
Code:
awk '/a001|b203|j151/ {gsub (/ *<[^>]*> */, _); printf "%s\t", $0} END {printf RS}' file
9781328740472    Peepers    7.99    10.99

# 11  
RudiC - Yes, thanks so much, that is essentially what I need. The output line would be one of many with the same structure, so I think I need a
Code:
\n

somewhere, but couldn't quite get it to work.
# 12  
Where do you need the <line feed>? If after the j151, be aware that there can be several in one record. If you can be sure there's just one, try
Code:
awk '/a001|b203|j151/ {TRS=/j151/?RS:"\t"; gsub (/ *<[^>]*> */, _); printf "%s%s", $0, TRS}' file
9781328740472    Peepers    7.99

# 13  
Hi, palex.

You need to have xml2 in your system. As I wrote, it is available for installing in at least the version of MacOS that I have, albeit from 3rd parties.

If the solution from RudiC works for you, then use it -- it is simpler than xml2.

Best wishes ... cheers, drl
This User Gave Thanks to drl For This Post:
# 14  
Very close... The following is the first four lines of output when I run the command on the entire data file:

Code:
9781328740472   Peepers 7.99
10.99
9780544503205   Curious George Fire Dog Rescue (CGTV reader)    3.99
5.99
9780544574786   Mistakes Were Made (but Not by Me)      15.95
22.50
9781328683786   Tools of Titans 28.00
40.00

I'm not sure where that extra field is coming from. Desired output:

Code:
9781328740472   Peepers 7.99
9780544503205   Curious George Fire Dog Rescue (CGTV reader)    3.99
9780544574786   Mistakes Were Made (but Not by Me)      15.95
9781328683786   Tools of Titans 28.00

Sorry if I was unclear! Thanks again!
Login or Register to Reply

|
Thread Tools Search this Thread
Search this Thread:
Advanced Search

More UNIX and Linux Forum Topics You Might Find Helpful
XML to CSV
pareshkp
I want to pharse below Xml Using Shell Scripting . Thanks in Advance <md> <neid> <neun>1523</neun> <nedn>XXX1212</nedn> <nesw>fffff12515</nesw> </neid> <mi> <mts>20141128001500</mts> <gp>550</gp> <mt>pmct1</mt> <mt>pmNo2</mt> <mt>pmNo3S</mt> <mv> <moid>Ma=1,Rn=1,Ul=311C</moid>...... Shell Programming and Scripting
6
Shell Programming and Scripting
XML to TXT or CSV
A-V
Hi all, I am new to unix and even newer to XML :wall: I have a dataset which I need to work on and extract data from but I cant even see things. its a XML file which i need to analyse and return the results in xml as well but need to filter some of them like i would do with excel file so not...... UNIX for Dummies Questions & Answers
7
UNIX for Dummies Questions & Answers
XML to CSV specific
mohan705
Hi , Please any one to help on ,extract this xml code into csv columns list. <SOURCEFIELD BUSINESSNAME ="" DATATYPE ="date" DESCRIPTION ="" FIELDNUMBER ="1" FIELDPROPERTY ="0" FIELDTYPE ="ELEMITEM" HIDDEN ="NO" KEYTYPE ="NOT A KEY" LENGTH ="19" LEVEL ="0" NAME ="BUSINESS_DATE"...... Shell Programming and Scripting
4
Shell Programming and Scripting
CSV processing to XML
angel2008
Hi, i am really fresh with shell scripting and programming, i have an issue i am not able to solve to populate data on my server for Cisco IP phones. I have CSV file within the following format: ;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;...... Shell Programming and Scripting
9
Shell Programming and Scripting
CSV to XML
pjanakir
Iam pretty new to UNIX and would like to convert a CSV to an XML file using AWK scripts. Can anybody suggest a solution? My CSV file looks something like this : Serial No Growth% Annual % Commission % Unemployed % 1 35% 29% 59% 42% 2 61% ...... Shell Programming and Scripting
15
Shell Programming and Scripting