我有两个文件:
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多很多。
这可能吗?
答案 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