awk output not what was expected


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting awk output not what was expected
# 1  
Old 02-06-2015
awk output not what was expected

Good Moring,
I am currently reading about awk in a manual and following the examples using the oratab file.
My system is SOLARIS 10
I think I am getting strange behavior judging by what the book says to do and what I am getting with my little program.
Here is my program:
Code:
grep -v  [#]  oratab | /usr/xpg4/bin/awk    'BEGIN  { RS = ":" } ;   /Y/   { print   $1,   $3 }'

sample from oratab: Before parsing.
Code:
#dlspfx:/oracle/product/10.2.0/db05_2:Y
#dlpayx:/oracle/product/10.2.0/db05_2:Y
dlqdbx:/oracle/product/10.2.0/db05_2:N
tundtimx:/oracle/product/11.2.0/dbhome_4:Y

EXPECTED OUTPUT:

Code:
dlspfx          Y
dlpayx         Y
tundtimx      Y


But my actual is:

ACTUAL OUTPUT:

Code:
Y
Y
Y



It appears that something has shifted and I can’t figure out what is wrong with my syntax in the original statement.

Code:
grep -v  [#]  oratab | /usr/xpg4/bin/awk    'BEGIN  { RS = ":" } ;   /Y/   { print   $1,   $3 }'


I did the following print and the output is below it.

FIELD $0: suppose to return the entire string ex. tsaimx:/oracle/product/11.2.0/dbhome_3:Y but doesn’t. It returns the correct information but in reverse order: field $3 then $1. It should be the other way around.

Code:
grep -v  [#]  oratab | /usr/xpg4/bin/awk 'BEGIN { RS = ":" } ;  /Y/ { print   $0 }'


Code:
Y
as10gr2
Y
cmf1
Y
cmf2



This should have printed out all 3 fields but doesn’t. Only field 1 and 3 are printed and they are also printed in reverse order.

Code:
grep -v  [#]  oratab | /usr/xpg4/bin/awk 'BEGIN { RS = ":" } ;  /Y/ { print $1, $2, $3 }'


Code:
Y      as10gr2 
Y      cmf1 
Y      cmf2 
Y      cmf9


This command prints the field that is NOT LISTED in the print command !!! It prints field number 1.

Code:
grep -v  [#]  oratab | /usr/xpg4/bin/awk  'BEGIN { RS = ":" } ;   /Y/  { print    $2, $3 }'


record: tsaimx:/oracle/product/11.2.0/dbhome_3:Y

Code:
cmf2 
cmf9 
dev101 
tundaimx 
tundatmx 
tundcllx



Why isn’t my program working as expected?

Any help on this matter would be appreciated.

thanks in advance

Moderator's Comments:
Mod Comment Please STOP using SIZE and FONT tags on every line you post. And, please use CODE tags for sample input, output, and code segments. CODE tags need to be used as in:
[CODE]sample input, sample output, and sample code[/CODE]
which will display as:
Code:
sample input, sample output, and sample code

[CODE][/CODE]sample input, sample output, and sample code[CODE][/CODE] will not work.

Last edited by Don Cragun; 02-06-2015 at 02:24 PM.. Reason: Remove hundreds of FONT and SIZE tags; add CODE and ICODE tags.
# 2  
Old 02-06-2015
Hi,
RS is record separator
FS is field separator
So, replace in your code, RS by FS.

Regards.
This User Gave Thanks to disedorgue For This Post:
# 3  
Old 02-06-2015
You want to set the field separator FS, not the record separator RS, which controls what is viewed as delimiting lines.
# 4  
Old 02-06-2015
You want to separate fields on ":" not records...
Code:
grep -v [#] ~/tmp/tmp.dat  | awk -F\: '/Y/ { print $1, $3 }'
tundtimx Y

Also you deliberately remove anything with a hash "#" in it prior o feeding awk.
# 5  
Old 02-06-2015
I found the problem:


Code:
grep -v  [#]  oratab | /usr/xpg4/bin/awk 'BEGIN { RS = ":" } ;  /Y/ { print $1, $3 }'

The RS in the begin statement should have read FS.

this thread can be closed.

thanks





Code:
grep -v  [#]  oratab | /usr/xpg4/bin/awk 'BEGIN { FS = ":" } ;  /Y/ { print $1, $3 }'

---------- Post updated at 11:10 AM ---------- Previous update was at 11:09 AM ----------

Yes you are right. I just found that out.

thanks for getting back too me.

---------- Post updated at 11:12 AM ---------- Previous update was at 11:10 AM ----------

Yes you are right. I reviewed my notes and that is what it said in the book.

chalk it up to a lack of experience.

Regards

Last edited by Don Cragun; 02-06-2015 at 02:29 PM.. Reason: Fix CODE tags again.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Grep output to file result not as expected

Hi Gurus, I run command grep ABC file1 > file2 against below file. I got all ABC_xxx in one line in file2. I expect to get multiple lines in file2. If I print result in screen, the result is expected. thanks in advance My os is SunOS 5.10 Generic_150400-64 sun4v sparc sun4v ABC_123 XXXXX... (2 Replies)
Discussion started by: green_k
2 Replies

2. Shell Programming and Scripting

awk not giving the output expected

Hello, I am practising awk and decided to compare two columns and print the result of the comparison as third column i/p data c1,c2,c3 1,a,b 1,b,b i am trying to compare the last two columns and if they match I am trying to print match else mismatch(Ideally i want that as a last column... (5 Replies)
Discussion started by: mkathi
5 Replies

3. Shell Programming and Scripting

Assigning variable to output gives error with expected result

Hello, I am trying to print out the first string matching query with grep and I need your help. My scenario: Database John F 4433 Street No 88 CA Elisabeth Taylor 7733 Street No 26 ON Jack Nicholson 0133 Green Park No 34 AR John F 2 9399 Southpark No 02D UT test.sh... (6 Replies)
Discussion started by: baris35
6 Replies

4. Shell Programming and Scripting

For loop not giving expected output

#cat /tmp/input old_array old_dev new_dev new_array 0577 008AB 01744 0125 0577 008AC 01745 0125 0577 008AD 005C8 0125 0577 008AE 005C9 0125 0577 008AF 005CA 0125 0577 008B0 005CB 0125 0577 008B1 005CC 0125 cat test.sh #!/bin/ksh... (4 Replies)
Discussion started by: mbak
4 Replies

5. Shell Programming and Scripting

Grep can't match expected but output all

lyang001@lyang001-OptiPlex-9010:~$ service --status-all |grep dbus acpid acpi-support alsa-restore alsa-store anacron apport atd avahi-daemon bluetooth cgroup-lite console-setup cron cups dbus dmesg dns-clean failsafe-x ... (1 Reply)
Discussion started by: yanglei_fage
1 Replies

6. Shell Programming and Scripting

Trying to learn to use functions in gawk and not getting expected output.

I've been working on improving my awk, and the next thing I want to learn is to properly use functions (I understand functions in shell and python). I have the following code which includes how I did this without functions before, and two attempts I've made to do it with functions: function... (3 Replies)
Discussion started by: DeCoTwc
3 Replies

7. Shell Programming and Scripting

Not getting expected output

Hi I have written below script to get the data in table form. #!/bin/sh echo "File Name\tType" for i in *; do echo "$i\t\c" if ; then echo "directory" elif ; then echo "symbolic link" elif ; then echo "file" else echo "unknown" fi donehowever i am getting output in different way... (3 Replies)
Discussion started by: scriptor
3 Replies

8. Shell Programming and Scripting

Output is not comming as expected

Hi All, I am in middle of one script. I want output in the form of xls file. There are 4 fields - user name, email Id, full name, date of birth. I want these details to get in seperate columns. But, i am getting it in the single cell and as like a paragraph.:mad: Please suggest me some... (8 Replies)
Discussion started by: Agupte
8 Replies

9. Shell Programming and Scripting

awk not generating the expected output

Hi, I am presently stuck in a csv file. INPUT CSV baseball,NULL,8798765,Most played baseball,NULL,8928192,Most played baseball,NULL,5678945,Most played cricket,NOTNULL,125782,Usually played cricket,NOTNULL,678921,Usually played EXPECTED OUTPUT CSV ... (7 Replies)
Discussion started by: scripter12
7 Replies

10. Programming

[C language] system function print output when not expected.

Hi, I am new to C and have a little problem. I am not planning to be a C expert, but this would be nice to understand. The problem is that a 'system' call prints it output to stdout, when I do not expect this. This is the program: trial.c #include <ctype.h> #include <unistd.h>... (5 Replies)
Discussion started by: ejdv
5 Replies
Login or Register to Ask a Question