Extracting text with "nawk"


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Extracting text with "nawk"
# 1  
Old 01-28-2010
Extracting text with "nawk"

Hi -

I have a simple file (x.xml):
Code:
<tag1>text 1</tag1>
<tag2>text 2</tag2>
<tag3>text 3</tag3>
<tag4>text 4</tag4>
<tag5>text 5</tag5>

I am trying to run a simple nawk script against it in order to get the text contained within the tags:
Code:
nawk 'BEGIN{FS="[<|>]"}
/tag1/{tag1=$3}
/tag2/{tag2=$3}
/tag3/{tag3=$3}
/tag4/{printf("tag1: %s - tag4: %s - tag3: %s\n",$tag1,$3,$tag3)};
' x.xml > x.out

I want the output:
Code:
tag1: text1 - tag4: text4 - tag3: text3

But end up with something totally different!

Can anyone see what I am doing wrong with the above code?

Regards,

Neil.
[Link Removed]

Last edited by Scott; 01-28-2010 at 11:47 AM.. Reason: Removed link; added code tags
# 2  
Old 01-28-2010
Should work for you Smilie
Code:
awk -F'[<>]' '{sub(OFS,X);n=((n) ? n " - ":X) $2": "$3}END{print n}'  infile

# 3  
Old 01-28-2010
$ is not required inside awk to retrieve value from user defined variable. Remove $ before variable.
Code:
nawk 'BEGIN{FS="[<|>]"}
/tag1/{tag1=$3}
/tag2/{tag2=$3}
/tag3/{tag3=$3}
/tag4/{printf("tag1: %s - tag4: %s - tag3: %s\n",$tag1,$3,$tag3)};
' x.xml > x.out

# 4  
Old 01-28-2010
Hi -

I only want to output the specific tags (and not all of them)

(The method above was working, but I managed to break it somehow!)

Any ideas?

Regards,

Neil.

---------- Post updated at 05:33 PM ---------- Previous update was at 05:30 PM ----------

Quote:
Originally Posted by anbu23
$ is not required inside awk to retrieve value from user defined variable. Remove $ before variable.
Code:
nawk 'BEGIN{FS="[<|>]"}
/tag1/{tag1=$3}
/tag2/{tag2=$3}
/tag3/{tag3=$3}
/tag4/{printf("tag1: %s - tag4: %s - tag3: %s\n",$tag1,$3,$tag3)};
' x.xml > x.out

Hi -

The problem is that "tag1" and "tag3" output nothing, i.e. appear to be empty! "tag4" (which is represented by $3) outputs ok.

Any ideas?

Regards,

Neil.

---------- Post updated at 06:00 PM ---------- Previous update was at 05:33 PM ----------

Sorry, resolved! Fat fingers!
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Bash script - Print an ascii file using specific font "Latin Modern Mono 12" "regular" "9"

Hello. System : opensuse leap 42.3 I have a bash script that build a text file. I would like the last command doing : print_cmd -o page-left=43 -o page-right=22 -o page-top=28 -o page-bottom=43 -o font=LatinModernMono12:regular:9 some_file.txt where : print_cmd ::= some printing... (1 Reply)
Discussion started by: jcdole
1 Replies

2. UNIX for Dummies Questions & Answers

Extracting Parts of String "#" vs "%"

Hello, I have a question regarding extracting parts of a string and the meaning of # and % in the syntax. I created an example below. # filename=/first/second/third/fourth # # echo $filename /first/second/third/fourth # # echo "${filename##*/}" fourth # # echo "${filename%/*}"... (3 Replies)
Discussion started by: shah9250
3 Replies

3. UNIX for Dummies Questions & Answers

Using "mailx" command to read "to" and "cc" email addreses from input file

How to use "mailx" command to do e-mail reading the input file containing email address, where column 1 has name and column 2 containing “To” e-mail address and column 3 contains “cc” e-mail address to include with same email. Sample input file, email.txt Below is an sample code where... (2 Replies)
Discussion started by: asjaiswal
2 Replies

4. Shell Programming and Scripting

Using sed to find text between a "string " and character ","

Hello everyone Sorry I have to add another sed question. I am searching a log file and need only the first 2 occurances of text which comes after (note the space) "string " and before a ",". I have tried sed -n 's/.*string \(*\),.*/\1/p' filewith some, but limited success. This gives out all... (10 Replies)
Discussion started by: haggismn
10 Replies

5. Shell Programming and Scripting

awk command to replace ";" with "|" and ""|" at diferent places in line of file

Hi, I have line in input file as below: 3G_CENTRAL;INDONESIA_(M)_TELKOMSEL;SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL My expected output for line in the file must be : "1-Radon1-cMOC_deg"|"LDIndex"|"3G_CENTRAL|INDONESIA_(M)_TELKOMSEL"|LAST|"SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL" Can someone... (7 Replies)
Discussion started by: shis100
7 Replies

6. Shell Programming and Scripting

Extracting Complete Text Between " "

The script: for i in $(awk '/\".*\"/' list.txt) do echo $i done iist.txt: "Willie" "Willie Willie" "Willie Willie Wee" "Willie Willie Wee Wee" The results: "Willie" "Willie Willie" "Willie Willie Wee" "Willie (6 Replies)
Discussion started by: Trapper
6 Replies

7. Shell Programming and Scripting

read -p "prompt text" foo say "read: bad option(s)" in Bourne-Shell

Hallo, i need a Prompting read in my script: read -p "Enter your command: " command But i always get this Error: -p: is not an identifier When I run these in c-shell i get this error /usr/bin/read: read: bad option(s) How can I use a Prompt in the read command? (9 Replies)
Discussion started by: wiseguy
9 Replies

8. Shell Programming and Scripting

Extracting a text between ""

Hi, I am having trouble extracing a string between the quotes. The OS in solaris 8 I have a directory which has solaris packages and i need to do pkginfo for all and search for uninstalled packages. #ls -l drwxr-xr-x 5 root other 512 Apr 14 17:41 SUNWxwplx drwxr-xr-x ... (14 Replies)
Discussion started by: Jartan
14 Replies

9. UNIX for Dummies Questions & Answers

Convert "text" to "packed-decimal"?

Is there a way with HP-UX Release 10.20 (but going to HP-UX 11) to convert a regular "text" file to a packed data format (such as is created by a Cobol program)? (2 Replies)
Discussion started by: HuskyJim
2 Replies
Login or Register to Ask a Question