文件1
#CHROM POS ID REF_Zv ALT_lm
chr1A 219620 . T A
chr1A 219648 . A G
chr1A 219867 . A G
文件2
#CHROM POS ID REF_Zv ALT_RV
chr1A 219457 . C T
chr1A 219670 . A G
chr1A 219867 . A C
文件3
#CHROM POS ID REF_Zv ALT_lm ALT_RV
chr1A 219620 . T A NA
chr1A 219648 . A G NA
chr1A 219867 . A G C
chr1A 219457 . C NA T
chr1A 219670 . A NA C
我的命令是
awk 'FNR==NR{a[$1,$2];next} {if(a[$1,$2]==""){a[$1,$2]=0};print \
$1,$2,$3,$4,$5, a[$4,$5]} ' file1 file2 > file3
但是,我无法获取我想要的 file3。你能帮我改进命令吗?
谢谢,福佑
答案1
我认为您无法一次性完成此操作 - 您要么需要保存索引ALT_lm
和ALT_RV
值并将它们合并/打印在一个END
块中(在这种情况下,很难保留原始顺序 - 如果这很重要),或者对其中一个文件进行两次传递:例如(丑陋 - 并且需要 GNU Awk):
$ gawk '
BEGIN {
OFS="\t";
print "#CHROM","POS","ID","REF_Zv","ALT_lm","ALT_RV";
}
BEGINFILE { fn++ }
FNR == 1 {next}
fn == 1 {ALT_RV[$1 FS $2] = $5; next}
fn == 2 {ALT_lm[$1 FS $2] = $5;}
{
print $1, $2, $3, $4, ($1 FS $2) in ALT_lm ? ALT_lm[$1 FS $2] : "NA", ($1 FS $2) in ALT_RV ? ALT_RV[$1 FS $2] : "NA";
}' file2 file1 file2
#CHROM POS ID REF_Zv ALT_lm ALT_RV
chr1A 219620 . T A NA
chr1A 219648 . A G NA
chr1A 219867 . A G C
chr1A 219457 . C NA T
chr1A 219670 . A NA G
chr1A 219867 . A G C