Awk 将文件中的每一列与另一个文件中的一列进行比较
我有Awk 将文件中的每一列与另一个文件中的一列进行比较,awk,Awk,我有file1.gz 看起来像 NC_044998.1 4013 0 TT 2 GG 0 TT 0 TT 0 TT NC_044998.1 4016 0 TT 0 TT 0 TT 2 GG 0 TT NC_044998.1 4017
file1.gz
看起来像
NC_044998.1 4013 0 TT 2 GG 0 TT 0 TT 0 TT
NC_044998.1 4016 0 TT 0 TT 0 TT 2 GG 0 TT
NC_044998.1 4017 0 TT 0 TT 0 TT 0 TT 0 TT
NC_044998.1 4018 0 TT 0 TA 0 TT 0 TT 0 TT
NC_044998.1 4019 2 CC 2 CC 2 CC 2 CC 2 CC
我需要比较$1,$2
,加上文件1
中每隔一列的每个字母($1,$2,$4的字母1
,然后$1,$2,$4的字母2
,然后$1,$2,$6的字母1
,然后$1,$2,字母2
等等)到文件2的$1,
chromo position major minor ref anc knownEM nInd
NC_044998.1 4013 T G T T 0.000000 1
NC_044998.1 4016 G T G G 0.000000 1
NC_044998.1 4018 T A T T 0.000000 1
NC_044998.1 4019 G A G G 0.000000 1
NC_044998.1 3760 G A G G 0.000000 1
如果有匹配项,则添加“ref
”,否则添加“dev
”。每个比较的结果都可以追加到最后一列,如下面的输出中所示
NC_044998.1 4013 0 TT 2 GG 0 TT 0 TT 0 TT ref ref dev dev ref ref ref ref ref ref
NC_044998.1 4016 0 TT 0 TT 0 TT 2 GG 0 TT dev dev dev dev dev dev ref ref dev dev
NC_044998.1 4017 0 TT 0 TT 0 TT 0 TT 0 TT
NC_044998.1 4018 0 TT 0 TA 0 TT 0 TT 0 TT ref ref ref dev ref ref ref ref ref ref
NC_044998.1 4019 2 CC 2 CC 2 CC 2 CC 2 CC dev dev dev dev dev dev dev dev dev dev
试图分两步解决
隔列拆分
awk 'BEGIN {FS = OFS = "\t"} {for (i=4; i<=12; i+=2) {sub(/./,"&\t",$i)1;} print $0};' file1
awk'BEGIN{FS=OFS=“\t”}{for(i=4;i您可以使用此awk
:
awk'开始{
FS=OFS=“\t”
}
FNR==NR{
地图[$1,$2]=5美元
下一个
}
地图(1美元,2美元){
我感谢你!这些天对我来说真的几乎是一个awk训练营!
| awk 'BEGIN {FS=OFS="\t"} FNR==NR {a[$1,$2,$5]; next} FNR==1 { next } {for (i=4; i<=12; i+=3) {print $0, (($1,$2,$4) in a ? "ref":"dev"), (($1,$2,$i + 1 ) in a ? "ref":"dev")}}' file2 -
NC_044998.1 4013 0 TT 2 GG 0 TT 0 TT 0 TT ref ref dev dev ref ref ref ref ref ref
NC_044998.1 4016 0 TT 0 TT 0 TT 2 GG 0 TT dev dev dev dev dev dev ref ref dev dev
NC_044998.1 4017 0 TT 0 TT 0 TT 0 TT 0 TT
NC_044998.1 4018 0 TT 0 TA 0 TT 0 TT 0 TT ref ref ref dev ref ref ref ref ref ref
NC_044998.1 4019 2 CC 2 CC 2 CC 2 CC 2 CC dev dev dev dev dev dev dev dev dev dev