[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Setting Multiple Shell Variables from One Run of awk



On Tue, Sep 30, 2008 at 01:48:46PM -0500, Martin McCormick wrote:
> 	Right now, I have a shell script that does the following:
> 
> hostname=`echo $NEWDEV |awk 'BEGIN{FS="."}{print $1}'`
> domain=`echo $NEWDEV |awk 'BEGIN{FS="."}{print $2}'`
> top0=`echo $NEWDEV |awk 'BEGIN{FS="."}{print $3}'`
> top1=`echo $NEWDEV |awk 'BEGIN{FS="."}{print $4}'`
> 
> 	That looks inefficient (dumb) so I ask, is there a way
> to assign the fields in an awk expression to shell variables as
> one runs awk once?

>From awk(1):

    OPTIONS
           -v var=val
           --assign var=val
                  Assign the value val to the variable var, before
                  execution of the program begins.   Such variable values
                  are available to the BEGIN block of an AWK program.

So maybe try:

    hostname=$(awk -v FS=$NEWDEV '{print $1}')

> 	Being able to do that would mean one run of awk instead
> of the 4 shown here and, if file accesses are involved, there is
> only one of those.

Ok, the above doesn't address that issue, but maybe you could set a
shell array with several values in one operation.  If you write a
shell script to set the variables, maybe you could then source that
script so that the changes are made to the current shell.

Ken

-- 
Ken Irving, fnkci@uaf.edu, 907-474-6152
Water and Environmental Research Center
Institute of Northern Engineering
University of Alaska, Fairbanks


Reply to: