Match and print columns in second file

Hi All,

I have to match each row in file 1 with 1st row in file 2 and print the corresponding column from file2. I am trying to use an awk script to do this. For example

cat File1

X1
X3
X4

cat File2

ID	X1	X2	X3	X4
A	1	6	2	1
B	2	7	3	3
C	3	8	4	1
D	4	9	1	1

Desired output is

cat File3

X1	X3	X4
1	2	1
2	3	3
3	4	1
4	1	1

It will be really helpful if anyone can suggest how to do this in awk.

Thank you for your time.

Regards,
R

Hi newpro,

One way:

$ cat file1
X1
X3
X4
$ cat file2
ID      X1      X2      X3      X4
A       1       6       2       1
B       2       7       3       3
C       3       8       4       1
D       4       9       1       1
$ cat script.awk 
BEGIN { 
        OFS = "\t" 
} 

FNR == NR { 
        f1[ $1 ] = 1
        next
} 

FNR < NR && FNR == 1 { 
        for ( i = 1; i <= NF; i++ ) { 
                if ( f1[ $i ] ) { 
                        header = header i 
                } 
        }
}

{ 
        for ( i = 1; i <= NF; i++ ) {
                if ( index( header, i ) > 0 ) {
                        printf $i OFS
                }
        }
        printf ORS
} 
$ awk -f script.awk file1 file2
X1      X3      X4
1       2       1
2       3       3
3       4       1
4       1       1

1 Like
awk 'BEGIN{OFS="\t"}
    NR == FNR{a[$0]; next} 
    FNR == 1{ for(i=1;i<=NF;++i){if($i in a){a[$i]=i}} for(e in a){printf e OFS} printf ORS; next}
    {for(i in a){printf $a OFS} printf ORS}' file1 file2
1 Like

Birei, Kevintse,

Thanks a lot for you help.

-R