• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1293
  • Last Modified:

UNIX script to merge xml

awk '/<\/document>/{system("cat image.xml")}{print}' doc.xml > output.xml

Greetings, the above script was recommended by another awesome EE Warrior.  However, for some reason it's not working.  I am using SOLARIS KSH.

I have two xml documents:
<document>
     <header></header>
     <tag1>
          <tag1a></tag1a>
    </tag1>
</document>


<images>
     <image>
          <name></name>
          <size></size>
     </image>
     ....(more images)
</images>


I need to get <images> into <document> like this:
<document>
     <header></header>
     <tag1>
          <tag1a></tag1a>
    </tag1>
     <images>
          <image>
               <name></name>
               <size></size>
          </image>
          ....(more images)
     </images>
</document>


The problem is I get no return. Nada.  This means I don't know what I'm doing wrong.  When I perform a MORE output.xml, it's not there.  
Help?
Thanks.
0
Evan Cutler
Asked:
Evan Cutler
  • 8
  • 7
  • 2
  • +2
3 Solutions
 
ozoCommented:
If it's not there, rather than there but empty, that indicates that  you had no permission to create the file, or you're looking in the wrong place for the output or .the command did not run at all.
0
 
Evan CutlerVolunteer Chief Information OfficerAuthor Commented:
it's set to 777, and I own the files...
anything else?
0
 
ozoCommented:
is output.xml there after just
> output.xml

Is there any result from just
awk '/<\/document>/{system("cat image.xml")}{print}' doc.xml
0
Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
Evan CutlerVolunteer Chief Information OfficerAuthor Commented:
yes...just the original xml..
image.xml is there, but the two don't merge...
any ideas?
Thanks.
0
 
ozoCommented:
Are you saying that the result of
awk '/<\/document>/{system("cat image.xml")}{print}' doc.xml
is the same as the result of
cat image.xml
?
So the {print} has no effect and doing
awk '/<\/document>/{system("cat image.xml")}{print}' doc.xml > output.xml
is the same as doing
awk '/<\/document>/{system("cat image.xml")}' doc.xml > output.xml
?
0
 
Evan CutlerVolunteer Chief Information OfficerAuthor Commented:
no...reverse.
I'm saying that cat image.xml produces nothing.

I only see doc.xml
0
 
ozoCommented:
if image.xml is empty, then the result of the merging nothing with doc.xml should be the same as  doc.xml
0
 
Evan CutlerVolunteer Chief Information OfficerAuthor Commented:
it's not empty...
if I do a cat image.xml, I see text.
0
 
ozoCommented:
I'm getting confused.
I thought you just said that cat image.xml produces nothing.

You also said that
output.xml, it's not there
so when you said
it's set to 777
, what is set to 777?
0
 
Evan CutlerVolunteer Chief Information OfficerAuthor Commented:
sorry...
for this exercise:
awk '/<\/document>/{system("cat image.xml")}{print}' doc.xml > output.xml

image.xml has contents. and is set to 777
doc.xml has the contents and is also set to 777

when I execute this line, output.xml just has the contents of doc.xml.

better?
0
 
ozoCommented:
Does
awk 'BEGIN{system("cat image.xml")}'
produce any output?

Does
awk '/<\/document>/{print}' doc.xml
produce any output?
0
 
Evan CutlerVolunteer Chief Information OfficerAuthor Commented:
ok
awk 'BEGIN{system("cat image.xml")}'
causes a pause in the command prompt...no output.

awk '/<\/document>/{print}' doc.xml
gives me </document>

could this be a solaris thing?
0
 
ozoCommented:
It could be, I don't have a solaris sytem handy to test.
Does the man page for awk on your system say anything about the system function?
Can you use other programs than awk for this purpose?
0
 
Evan CutlerVolunteer Chief Information OfficerAuthor Commented:
ok...found the solution...
using SED instead.

sed -e '/<document>/r image.xml' doc.xml>output.xml

it puts it on the top of the XML under <document> instead of the bottom,
but I can work with that.
0
 
tel2Commented:
> it puts it on the top of the XML under <document> instead of the bottom, but I can work with that.

Does this put it in the right place, arcee123?
    sed '/<\/tag1>/r image.xml' doc.xml >output.xml
Still not correctly indented, but that's easily fixed (if you want it fixed).
0
 
skullnobrainsCommented:
to insert before, try something like this

n
/<\/document>/ r file
p
0
 
tel2Commented:
Nice.  I didn't know that.
0
 
Gerwin Jansen, EE MVETopic Advisor Commented:
A slight modification to your original solution works for me:

awk '/\/document/{system("cat image.xml")}{print}' doc.xml > output.xml
0
 
Evan CutlerVolunteer Chief Information OfficerAuthor Commented:
Thanks guys...
this is awesome.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Cloud Class® Course: Microsoft Office 2010

This course will introduce you to the interfaces and features of Microsoft Office 2010 Word, Excel, PowerPoint, Outlook, and Access. You will learn about the features that are shared between all products in the Office suite, as well as the new features that are product specific.

  • 8
  • 7
  • 2
  • +2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now