加入文件awk

时间:2014-01-16 20:13:58

标签: join awk

我有两个文件:

FILE A
12  999900  1
12  999901  1
12  999902  1
12  999903  1
12  999904  1
12  999905  1
12  999906  1
12  999907  1
12  999908  2
12  999909  2
12  999910  2
12  999911  2
12  999912  2

FILE B

#CHROM  POS ID  REF ALT QUAL    FILTER  INFO    FORMAT  Carolyn
12  1000010 .   G   A   221 .   DP=9;VDB=0.0298;AF1=1;AC1=2;DP4=0,0,4,5;MQ=60;FQ=-54    GT:PL:DP:GQ 1/1:254,27,0:9:51
12  1000482 .   G   A   117 .   DP=7;VDB=0.0398;AF1=1;AC1=2;DP4=0,0,1,4;MQ=60;FQ=-42    GT:PL:DP:GQ 1/1:150,15,0:5:27
12  1001152 .   T   C   127 .   DP=10;VDB=0.0392;AF1=1;AC1=2;DP4=0,0,4,6;MQ=58;FQ=-57   GT:PL:DP:GQ

我想编写一个AWK脚本,比较文件A中的$ 2和文件B中的$ 2.输出应该像文件A一样但是有另一列。如果文件A和B中的$ 2匹配,则第4列应该说“匹配!”。

注意:文件A的行数比文件B多很多。

这可能吗?

1 个答案:

答案 0 :(得分:2)

使用awk

cat f1
12  999900  1
12  999901  1
12  999902  1
12  999903  1
12  999904  1
12  999905  1
12  999906  1
12  999907  1
12  999908  2
12  999909  2
12  999910  2
12  999911  2
12  999912  2

cat f2
#CHROM  POS ID  REF ALT QUAL    FILTER  INFO    FORMAT  Carolyn
12  1000010 .   G   A   221 .   DP=9;VDB=0.0298;AF1=1;AC1=2;DP4=0,0,4,5;MQ=60;FQ=-54    GT:PL:DP:GQ 1/1:254,27,0:9:51
12   999909 .   G   A   117 .   DP=7;VDB=0.0398;AF1=1;AC1=2;DP4=0,0,1,4;MQ=60;FQ=-42    GT:PL:DP:GQ 1/1:150,15,0:5:27
12  1001152 .   T   C   127 .   DP=10;VDB=0.0392;AF1=1;AC1=2;DP4=0,0,4,6;MQ=58;FQ=-57   GT:PL:DP:GQ

awk 'FNR==NR {a[$2];next} $2 in a {$0=$0 " match!"} 1' f2 f1
12  999900  1
12  999901  1
12  999902  1
12  999903  1
12  999904  1
12  999905  1
12  999906  1
12  999907  1
12  999908  2
12  999909  2 match!
12  999910  2
12  999911  2
12  999912  2

工作原理

awk '
    FNR==NR {               # Run this section for f2 file
        a[$2]               # store record #2 in array a
        next}               # skip to next record
    $2 in a {               # if $2 in file f1 is found in array a
        $0=$0 " match!"     # change record to show the match
        }
    1                       # do the default action, print $0
    ' f2 f1                 # the two input files