Using awk with variable name

Hi,

I have 2 files

File-template

NAME 1
CITY 2
AMOUNT 3
BAL 4

File - data

Anderson,,100,3000

File data always will have single record.

I the above case, if I want to extract value of AMOUNT from file data.
First I'll have to find position of AMOUNT in template and extract the specified column from the data.

Following is my code

column=AMOUNT  -- given only for testing
pos=`cat template|grep $column | awk '{print $2}`
data=`awk -F',' '{print $pos}' data`
echo $data

Since I do not know the exact column position, I'm using $pos in the script. Which is a error. Can anybody give me a solution.

Ronald.

This script should work :slight_smile:

+++++++++
$ cat ronaldsc
column=AMOUNT
pos=`cat template | grep $column | awk '{print $2}'`
data=`awk -F "," -v S=$pos '{print $S}' data`
echo $data
+++++++++

One more way of doing this, "'" (Double Quote-Single Quote-Double Quote)

data=`awk -F "," '{print $"'"$pos"'"}' data`

//Jadu :slight_smile:

nawk -f ronald.awk templateFile dataFile
nawk -v str2ext='NAME' -f ronald.awk templateFile dataFile
nawk -v str2ext='BAL' -f ronald.awk templateFile dataFile
nawk -v str2ext='FOO' -f ronald.awk templateFile dataFile

ronald.awk:

BEGIN {
    str2ext=(str2ext=="") ? "AMOUNT" : str2ext
}
FNR==NR{pos[$1]=$2; next}
{FS=",";$1=$1;print (str2ext in pos) ? $pos[str2ext] : "_unknown_"}

awk -F "," -v S=$(grep AMOUNT template | awk '{print $2}') '{print $S}' dat

pos=`awk '{if ($1=="AMOUNT") print $2}' 1.txt`
echo $pos
awk 'BEGIN{FS=","}{print $"'"$pos"'"}' 2.txt