How to get AWK to output 2 fields at once

Don Bolton lugnut at sequent.UUCP
Wed Nov 14 07:21:52 AEST 1990


In article <1990Oct29.171816.7459 at mrspoc.Transact.COM> itkin at guinan.Transact.COM writes:
>jak9213 at helios.TAMU.EDU (John Kane) writes:
>
>>In article <297 at twg.bc.ca> bill at twg.bc.ca (Bill Irwin) writes:
>>>I  have what initially seemed to be a simple requirement:  get the  first
>>>two fields from each line in file_1, and use them as a search pattern for
>>>GREP to extract matching lines in file_2.  [...]
>
>>>for x in `cat file_1 | awk '{ print $1 " " $2 }'`
>>>do
>>>        grep "$x" file_2
>>>done
>
>>>Of course, the GREP routine executed with x having the value of the first
>>>field  of  the  first line of file_1, then with the value of  the  second
>>>field  of  the first line of file_1, then the first field of  the  second
>>>line, .....
>
>>>Is  there a way to get AWK to output "field_1 field_2" as the value of x,
>>>so  that  this  can be used as the search pattern for GREP,  rather  than
>>>"field_1" "field_2" "field_1" "field_2"?
>
>>Yep, There is.
>
>>for x in `cat file_1 | awk '{print "\"" $1 " " $2 "\"")'`
>>do
>>   grep "$x" file_2
>>done
>
>This seems a bit complicated, doesn't it?  How about:
>
>    for x in "`cat file_1 | awk '{print $1, $2}'`"
>    do
>        grep "$x" file_2
>    done
>
>That is, why worry about the backslashes and quotes INSIDE AWK, when you
>can put them outside?  Clean and simple!

except the for statement still loops for EACH argument retrieved by your
awk statement. SOOOO... try

#Place in a _ to join $1 and $2 so the for loop sees a single arg

for x in `cat file_1 | awk '{print $1"_"$2}'`
    do

#Using the -F option for awk, remove the joiner for use by grep

	blarg=`echo $x | awk -F_ '{print $1, $2}'`
        grep $blarg file_2	
    done

Now you'll get what you want



More information about the Comp.unix.shell mailing list