[Okta Webinar] Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1157
  • 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 CutlerAuthor 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
Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

 
Evan CutlerAuthor 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 CutlerAuthor 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 CutlerAuthor 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 CutlerAuthor 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 CutlerAuthor 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 CutlerAuthor 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 CutlerAuthor Commented:
Thanks guys...
this is awesome.
0

Featured Post

VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

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