Gawk field separator problem


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Gawk field separator problem
# 1  
Old 06-27-2012
Gawk field separator problem

I'm trying to run a code using gawk and I'm having some trouble with it. What I'm trying to do is pull out value11 from the following input:

Code:
value11,value12,value13
value21,value22,value23

I have successfully done this before using awk with the following code:

Code:
 awk 'NR == 1 {FS=","; print $1}' inputfile

When I try to do this with gawk however, it ignores the field separator. I have tried numerous variations of using BEGIN and rearranging the order but no matter what I do it will either ignore the record number or the field separator. I'm sure there's some little syntax thing that I'm overlooking, but I can't quite seem to figure out what it is.

Can anyone point out what I might be doing incorrectly?

On a side note, when I did it using awk it was on a Unix machine, but right now I'm using gawk on Cygwin on my Windows machine.

Thanks in advance.

Last edited by Scrutinizer; 06-28-2012 at 04:35 AM.. Reason: additional code tags
# 2  
Old 06-28-2012
How about this ?
Code:
gawk -F"," 'NR == 1 {print $1}' inputfile

This User Gave Thanks to pravin27 For This Post:
# 3  
Old 06-28-2012
You need to specify the field separator before you start reading the first line, not during..
e.g.
Code:
awk -F, '{print $1; exit}' infile

Code:
awk '{print $1; exit}' FS=, infile

Code:
awk -v FS=, '{print $1; exit}'

Code:
awk 'BEGIN{FS=","}{print $1; exit}' infile


Last edited by Scrutinizer; 06-28-2012 at 04:44 AM..
This User Gave Thanks to Scrutinizer For This Post:
# 4  
Old 06-28-2012
You are setting the FS variable inside an action statement when awk/gawk has already read in the first line and decided on the fields based on the current value of FS (which was none). Hence, $1 will always be the full record/line read.

You can see this difference if you omit the pattern...

Code:
 awk '{FS=","; print $1}' inputfile

Output:

Code:
value11,value12,value13
value21

As you can make out,

1) first line had no FS set before the line was read...so $1 was $0..

2) FS was set to a comma by the previous action so, $1 was what you wanted...
This User Gave Thanks to elixir_sinari For This Post:
# 5  
Old 06-28-2012
Thanks. All of your suggestions worked (and saved me a lot of headache).
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Inserting a field without disturbing field separator on other fields

Hi All, I have the input as below: cat input 032016002 2.891 97.109 16.605 27.172 24.017 32.207 0.233 0.021 39.810 0.077 0.026 19.644 13.882 0.131 11.646 0.102 11.449 76.265 23.735 16.991 83.009 8.840 91.160 0.020 99.980 52.102 47.898 44.004 55.996 39.963 18.625 0.121 1.126 40.189... (15 Replies)
Discussion started by: am24
15 Replies

2. Shell Programming and Scripting

Field separator

Hello All, I have a file, but I want to separate the file at a particular record with comma"," in the line Input file APPLE6SSAMSUNGS5PRICEPERPIECEDOLLAR600EACH010020340URX581949695US to Output file APPLE6S,SAMSUNGS5,PRICEPERPIECE,DOLLAR600EACH,010020340URX581949695,US This is for... (11 Replies)
Discussion started by: m6248m
11 Replies

3. Shell Programming and Scripting

awk field separator help -

Hi Experts , file : - How to construct the awk filed separator so that $1, $2 $3 , can be assigned to the each "" range. I am trying : awk -F"]" '{print $1}' but it is printing the entire file. Not first field. The desired output needed for first field... (9 Replies)
Discussion started by: rveri
9 Replies

4. Shell Programming and Scripting

awk field separator

I need to set awk field separator to ";", but I need to avoid ";EXT". so that echo a;b;c;EXTd;e;f | awk -F";" '{print $3}' would give "c;EXTd" (2 Replies)
Discussion started by: locoroco
2 Replies

5. UNIX for Dummies Questions & Answers

change field separator only from nth field until NF

Hi ! input: 111|222|333|aaa|bbb|ccc 999|888|777|nnn|kkk 444|666|555|eee|ttt|ooo|ppp With awk, I am trying to change the FS "|" to "; " only from the 4th field until the end (the number of fields vary between records). In order to get: 111|222|333|aaa; bbb; ccc 999|888|777|nnn; kkk... (1 Reply)
Discussion started by: beca123456
1 Replies

6. Shell Programming and Scripting

echo field separator

I am trying to echo all fields except for the last field. I want to include the field seperator, but it is removed. echo "a;s;v;g" | awk -F ";" '{$(NF--)=""; print}' a s v I want an output like this: a;s;v; (3 Replies)
Discussion started by: locoroco
3 Replies

7. Shell Programming and Scripting

Field separator X'1F'

Hi, I have a flat file with fields separated by a X'1F' i have to fetch 4th field from second line. please help me how to achieve it. I tried with below command and its not working. cut -f4 -d`echo -e '\x1f'` filename.txt I am using SunOS. Thanks in advance. (2 Replies)
Discussion started by: rohan10k
2 Replies

8. Shell Programming and Scripting

awk, comma as field separator and text inside double quotes as a field.

Hi, all I need to get fields in a line that are separated by commas, some of the fields are enclosed with double quotes, and they are supposed to be treated as a single field even if there are commas inside the quotes. sample input: for this line, 5 fields are supposed to be extracted, they... (8 Replies)
Discussion started by: kevintse
8 Replies

9. Shell Programming and Scripting

field separator in Perl

is there a similar parameter you can set in perl like FS in awk? I think I've read all the tutorials on the subject, but cannot get this map split and so on thing to work. I need to sort a file by columns, eg. first, third, fifth... The script I need to add this column sorting is this: use... (38 Replies)
Discussion started by: ahsog
38 Replies

10. Shell Programming and Scripting

Problem in getting the ps information with field separator

Dear all I have the following problem that want to have your advices. I want to capture the `ps auxwww | head -30` image with field separator (|) in my script My expect output USER PID %CPU %MEM SZ RSS TTY STAT STIME TIME COMMAND root | 774 | 18.5 | 0.0 | 12 | 19716 | - |... (5 Replies)
Discussion started by: on9west
5 Replies
Login or Register to Ask a Question