awk easy question


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting awk easy question
# 1  
Old 06-19-2013
awk easy question

So, I have the following code:

Code:
cat testfile.txt | awk -F, '{ print $1" "$2" "$3" "$4" "$5 }'  | read DOC ORG NAME
echo "$DOC"
echo "$ORG"
echo "$NAME"

My testfile.txt looks something like the following:

Code:
Document Type,Project Number,Org ID,Invoice Number

It will eventually be more complicated, but that's not the point.

WHY OH WHY does awk insist on using " " as a field separator, in addition to the ","? What am I doing wrong here? My output is

Code:
Document
Type

I have tried using BEGIN and setting FS=',' . I've tried putting quotes everywhere I can think of, of every type. No dice.
# 2  
Old 06-19-2013
If your requirement is to get the comma separated values into different variables, then why use awk?
Code:
#!/bin/ksh

while IFS="," read DOC PRID ORG NAME
do
        echo "$DOC"
        echo "$PRID"
        echo "$ORG"
        echo "$NAME"
done < testfile.txt

These 2 Users Gave Thanks to Yoda For This Post:
# 3  
Old 06-19-2013
It's not awk, it's the read command splitting the input at spaces (awk removed the commas before). Why don't you read that file immediately like
Code:
IFS="," read DOC ORG NAME REST

?

Rats, One : Nil for Yoda!
This User Gave Thanks to RudiC For This Post:
# 4  
Old 06-19-2013
awk is working fine.

You may have to change the IFS while reading Smilie
This User Gave Thanks to PikK45 For This Post:
# 5  
Old 06-19-2013
if you don't want space as default field separator, you can define one using OFS
BEGIN{FS=OFS=","} or awk -F, '{.......}' OFS=\, input
This User Gave Thanks to juzz4fun For This Post:
# 6  
Old 06-19-2013
Thanks everyone! I'm pretty bad at this, as you can tell, but this forum has been amazing so far Smilie

---------- Post updated at 01:24 PM ---------- Previous update was at 11:36 AM ----------

Ok, one more stupid question.

Code:
i=0
while [ i -le 1 ]
do
echo "<section name=\"Query$i\">"
while IFS="," read DOC VOUCHER PO PROJECT ORG CONTRACT CUSTOMERIN CUSTOMERID PROPOSAL OWNING EMPLOYEE VENDOR DATE PRMAN PR SUBJECT RQID COST CO RQ
do
        echo "$DOC"
        echo "$VOUCHER"
        echo "$PO"
        echo "$PROJECT"
        echo "$ORG"
        echo "$CONTRACT"
        echo "$CUSTOMERIN"
        echo "$CUSTOMERID"
        echo "$PROPOSAL"
        echo "$OWNING"
        echo "$EMPLOYEE"
        echo "$VENDOR"
        echo "$DATE"
        echo "$PRMAN"
        echo "$PR"
        echo "$SUBJECT"
	echo "$RQID"
	echo "$COST"
	echo "$CO"
	echo "$RQ"
done 
i=`expr $i + 1`
done < test2.csv

My plan here is to display some stuff before the parsing begins, then loop through the first line, echo all the contents (with more formatting yet to come), then once I hit the new line, go back to the beginning of the first loop and start again. As of right now, however, my output looks like this:

Code:
<section name="Query0">
IA Supporting Docs
Voucher Number
Invoice Number
PO Number
Project Number
ORG ID














</section>
<section name="Query1">
</section>

I have a lot of blank fields in the file, so the big space is expected. My issue is the fact that it doesn't currently seem to loop back around for the second line. Is this where awk would need to come in? Every line has the same number of "elements" separate by commas, which is the amount of variables I am catching, but is there something special I need to do for it to jump to the next line? The final file will have >100 lines in it, but I am testing with a file with just 2 lines before I go that far.
# 7  
Old 06-19-2013
This is wrong:
Code:
while [ i -le 1 ]

Should be:

Code:
while [ "$i" -le 1 ]

Why do you have a while loop inside your while loop, though? The 'while read' loop will eat all your lines. By the time the second loop happens, they will be all gone.

If you want to read the same file repeatedly, redirect your file into the inner loop, not the outer one.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

awk Help: quick and easy question may be: How to use &&

Hi Guru's. I am trying to use to check if $5 is greater than 80 & if not 100, then to print $0 : awk '{ if ($5>80) && if ($5 != 100) print $0} But getting error: >bdf1|sed 's/%//g'|awk '{ if ($5>80) && if ($5 != 100) print $0}' syntax error The source line is 1. The error... (6 Replies)
Discussion started by: rveri
6 Replies

2. UNIX for Dummies Questions & Answers

fun and easy awk question

I have a file called mytitles.txt containing a list of book titles I have a second file called abfile.txt containing a list of book titles (in the 3rd field) and it has author info and copyright year info as well.. I want to search mytitles.txt for a match in the 3rd field of abfiles.txt, and... (2 Replies)
Discussion started by: glev2005
2 Replies

3. UNIX for Dummies Questions & Answers

easy question

Hi everybody: Could anybody tell me if I have several files which each one it has this pattern name: name1.dat name2.dat name3.dat name4.dat name10.dat name11.dat name30.dat If I would like create one like: name_total.dat If I do: paste name*.dat > name_total.dat (15 Replies)
Discussion started by: tonet
15 Replies

4. Shell Programming and Scripting

Hopefully an Easy Question

I have a file name in this format ABC_WIRE_TRANS_YYYYMMDD_00.DAT I need to cut out the _00 out of the file name everytime. It could be _00, _01,_02, etc .... How do I cut it out to look as follows? ABC_WIRE_TRANS_YYYYMMDD.DAT (6 Replies)
Discussion started by: lesstjm
6 Replies

5. Shell Programming and Scripting

Easy AWK question

Ive got some output in a file that looks exactly like this: 1 ----------- 1542 1 record(s) selected. How do I just extract that 1542 and drop it into another file or (preferrably) a variable (using a ksh script) (9 Replies)
Discussion started by: rdudejr
9 Replies

6. UNIX for Dummies Questions & Answers

Easy question about awk gsub

How does one escape the left bracket in awk? For example: | awk 'gsub (" I'm sure it's pretty simple, I'm just a noob. (1 Reply)
Discussion started by: TheCrunge
1 Replies

7. Shell Programming and Scripting

A easy question.

this is the simple question, please help me! the question is: how to send exactly 50 ICMP Echo request packets with 500 bytes of payload to 202.139.129.221? I tried to use ping -F 500 202.139.129.221, but it didn't work. Thanks! (6 Replies)
Discussion started by: kikikaka
6 Replies

8. UNIX for Dummies Questions & Answers

Another easy question

Hello Again, Ok guys. Thanks again for your help last time but I am in need of your experience again. I wrote this script: #!/bin/sh # List either files or directories in individual accounts # using 1, 2 or 3 with invalid case $1 in echo select 1 to see the FILES in your... (3 Replies)
Discussion started by: catbad
3 Replies

9. UNIX for Dummies Questions & Answers

easy question

I know the Sun Solaries versions are ( 2.3 , 2.4 , 2.5 ... 7 , 8 ) . But some times I see sun os v5.x what does it mean ?? also what is the last new machine for sun and what are its details specifications . Thanks (3 Replies)
Discussion started by: tamemi
3 Replies

10. UNIX for Dummies Questions & Answers

Easy question

Hi, Simple question. How do I convert a unix text file to a dos text file? Thanks Helen (4 Replies)
Discussion started by: Bab00shka
4 Replies
Login or Register to Ask a Question