Unable to assign value to variable using awk coz of whitespace in value

Unix gurus,

I have a file as below, which is basically the result set obtained from a sql query on an Oracle database.

ID           PROG_NAME      USER_PROG_NAME
-------- --------------- ----------------------------------------
33045      INCOIN             Import Items
42690      POXPOPDOI       Import Standard Purchase Orders

I want to assign the results to variables. Something like:

cat filename | tail +4 | while read line ## tail +4 because the first 3 lines are the heading!
do
id=$(echo ${line} | awk '{print $1}')
prog_name=$(echo ${line} | awk '{print $2}')
user_prog_name=$(echo ${line} | awk '{print $3}')

However, I am unable to assign the 3rd column to variable user_prog_name since it has spaces. :confused:

How can I overcome this problem?

TIA,

Regards,

Praveen
[/SIZE]

Replace
your line :user_prog_name=$(echo ${line} | awk '{print $3}')

by :user_prog_name=$(echo ${line} | awk '{print $3 $4 $5 $6}')
(or)
user_prog_name=$(echo ${line} | awk '{print $3 " " $4 " " $5 " " $6}') to provide single space " " between $3,$4,$5 and $6 when the values are store in variable.

I am post this script after check.
It is running fine.
concept:
here we join the remaining last n coloumn and save it in a variable.
byebye..

Your solution works if the number of words in the column USER_PROG_NAME is know. But it is NOT.

It can contain 1, 2 or even 5 words with spaces seperating them. :eek:

So basically what I want is: from $3 to end of line.

How exactly can I achieve it? :confused:

TIA,

Regards,

Praveen

Hi,
Now Replace

your line :user_prog_name=$(echo ${line} | awk '{print $3}')
by :user_prog_name=$(echo ${line} | awk '{for (a = 3; a <= NF; a++) print $a }')