12-31-2010
Parsing XML in awk : OFS does not work as expected
Hi,
I am trying to parse regular XML file where I have to reduce number of decimal points in some xml elements. I am using following AWK command to achive that :
#!/bin/ksh
EDITCMD='BEGIN { FS = "[\<\>]"; OFS=FS }
{
if ( $3 ~ "[0-9][0-9]*\\.[0-9][0-9]*" && length(substr($3,1+index($3,"."))) == 15 ) {
PRE=substr($3,1,index($3,".")-1);
POST=substr($3,1+index($3,"."),5);
$3 = PRE "." POST
}
{
print $0
}
}'
nawk "$EDITCMD" /path/file.xml
Problem is, that I can not make the OFS to be correctly print out in the lines where the transformation was applied. Output looks like this:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Import xmlns:xsi="">
<INSTRUMENT>
<INSTRUMENT_CD>00036AAB1</INSTRUMENT_CD>
<BUNDLE_ID>48328</BUNDLE_ID>
<ACCRUAL_DT>5/8/2001</ACCRUAL_DT>
[<>]AMT_ISU[<>]125000000.00000[<>]/AMT_ISU[<>]
<ANNOUNCE_DT>5/1/2001</ANNOUNCE_DT>
<CD_INSTMT_TYPE>UNKNOWN</CD_INSTMT_TYPE>
<CHANGE_DT>5/7/2009 21:02:01.370</CHANGE_DT>
..
..
What am I doing wrong ? FS definition seems to be correct as the transformation is applied to the correct fields/strings, but why the OFS does not hold corresponding FS character when line is been printed out ? It did not help when I escaped, double escaped or did not escaped this characters in FS.
Thanks for your help,
Martin
10 More Discussions You Might Find Interesting
1. UNIX for Dummies Questions & Answers
I am trying to use a line of output in an XML file as input in another new XML file for processing purposes via a shell script. Since I am a newbie though, I'm not sure how to do this since the data is different everytime. I am using this technique with static data right now:
echo -n "Running... (5 Replies)
Discussion started by: corwin43
5 Replies
2. Shell Programming and Scripting
Hi people!,
I need extract from the file (test-file.txt) the values between
<context> and </context> tag's , the total are 7 lines,but i can only get 5 or 2 lines!!:confused:
Please look my code:
#awk '/context/{flag=1} /\/context/{flag=0} !/context/{ if (flag==1) p
rint $0; }'... (3 Replies)
Discussion started by: ricgamch
3 Replies
3. Shell Programming and Scripting
As per another thread - https://www.unix.com/shell-programming-scripting/81027-how-can-i-parse-xml-file-2.html
I am using the following to extract the Subaccid and RecAccTotal from the xm file below
awk -v v=SubaccId -F'' '$2==v{s=$3;getline;a+=$3}END {for (i in a)print v,i,a}' file
Can... (6 Replies)
Discussion started by: frustrated1
6 Replies
4. Shell Programming and Scripting
hello ,
i am trying to parse xml using awk however its a little bit tricky as i want
<databases>
<source>
<host>prod</host>
<port>1522</port>
<tns>GP1</tns>
<user>P11</user>... (6 Replies)
Discussion started by: amit1_x
6 Replies
5. Shell Programming and Scripting
Hi ,
I have an xml format as shown below:
<Info>
<last name="sean" first name="john"/>
<period="5" time="11"/>
<test value="1",test2 value="2",test3 value="3",test4 value="5">
<old>
<value1>1</value1>
<value2>2</value2>
</old>
<new>
<value1>4</value1>
<value2>3</value2>
</new>... (1 Reply)
Discussion started by: natalie23
1 Replies
6. Shell Programming and Scripting
Hi All,
I have a comma seperated delimited file with 10 columns. I need to convert it into TAB seperated delimited file.
awk -F"," '{print $1"\t"$2"\t"$3"\t"$4"\t"$5"\t"$6"\t"$7"\t"$8"\t"$9"\t"$10}' a.txt >> b.txt
how to use OFS to get the same output. I have tried by googling, but it... (5 Replies)
Discussion started by: Amit.Sagpariya
5 Replies
7. Shell Programming and Scripting
My XML structure looks like:
<?xml version="1.0" encoding="UTF-8"?>
<SearchRepository>
<SearchItems>
<SearchItem>
...
</SearchItem>
<SearchItem>
...
... (1 Reply)
Discussion started by: jasonjustice
1 Replies
8. Shell Programming and Scripting
hi all..
need your help again..
i have xml file and i want to parsing some data from the xml file..
<ex-name="keroco">
<................>
<................>
<................>
<br-name="cincai">
<ship="123456">
<...................>
... (3 Replies)
Discussion started by: buncit8
3 Replies
9. UNIX for Dummies Questions & Answers
Hello,
I have an issue with adding commas as delimiters in this scenario:
cat xtr3.rpl|head -5|awk 'BEGIN {OFS=","} {print $1,$2,$3,$4}'
Produces this output:
00530083,0000000471,000000000000.00,000000000000.00
00530085,0000000471,000000000000.00,000000000000.00... (10 Replies)
Discussion started by: MIA651
10 Replies
10. Shell Programming and Scripting
Hi All,
I have a problem to resolve. For following XML file, I need to parse the values based on Tag Name. I would prefer to use this by awk. I have used sed command to replace the tags (s/<SeqNo>//).
In this case there can be new tags introduced. So need to parse it based on Tag Name. Any... (9 Replies)
Discussion started by: Tons
9 Replies
TRUNCATE(1) User Commands TRUNCATE(1)
NAME
truncate - shrink or extend the size of a file to the specified size
SYNOPSIS
truncate OPTION... FILE...
DESCRIPTION
Shrink or extend the size of each FILE to the specified size
A FILE argument that does not exist is created.
If a FILE is larger than the specified size, the extra data is lost. If a FILE is shorter, it is extended and the extended part (hole)
reads as zero bytes.
Mandatory arguments to long options are mandatory for short options too.
-c, --no-create
do not create any files
-o, --io-blocks
treat SIZE as number of IO blocks instead of bytes
-r, --reference=RFILE
base size on RFILE
-s, --size=SIZE
set or adjust the file size by SIZE bytes
--help display this help and exit
--version
output version information and exit
The SIZE argument is an integer and optional unit (example: 10K is 10*1024). Units are K,M,G,T,P,E,Z,Y (powers of 1024) or KB,MB,... (pow-
ers of 1000).
SIZE may also be prefixed by one of the following modifying characters: '+' extend by, '-' reduce by, '<' at most, '>' at least, '/' round
down to multiple of, '%' round up to multiple of.
AUTHOR
Written by Padraig Brady.
REPORTING BUGS
GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
Report truncate translation bugs to <http://translationproject.org/team/>
COPYRIGHT
Copyright (C) 2017 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.
SEE ALSO
dd(1), truncate(2), ftruncate(2)
Full documentation at: <http://www.gnu.org/software/coreutils/truncate>
or available locally via: info '(coreutils) truncate invocation'
GNU coreutils 8.28 January 2018 TRUNCATE(1)