根据其他两列之间的匹配来填充某列中的空行

根据其他两列之间的匹配来填充某列中的空行

文件а.txt

snp chr pos effect  noneffect   eaf beta    se  pval    pval    pval
chr:1   1   101 A   G   0.3 -0.04   0.03    0.1 0.44    0.936
chr:1   1   1000    B   L   0.01    0.03    0.8 0.427   0.6804

来自的一些行а.txt可能会遗漏$6值(例如此处的第二行)。文件b.txt

101 0.1
1000 0.2

我正在寻找一种方法来用from替换$6ofa.txt$2b.txt

我尝试了以下命令,但未能解决问题:

awk '$6 {print $3,$6} !$6 {print $3,$2}' b.txt a.txt
awk 'NR==FNR{a[$1];next}$3 in a{print}' b.txt a.txt

我该如何解决?

答案1

如果你可以使用字段数NF来确定是否$6缺失,你可以这样做

awk 'NR==FNR {a[$1]=$2; next} NF<11 {$6 = a[$3] OFS $6} {print}' b.txt a.txt

如果要美化输出,请通过管道传输column -t

$ awk 'NR==FNR {a[$1]=$2; next} NF<11 {$6 = a[$3] OFS $6} {print}' b.txt a.txt | column -t
SNP               CHR  POS    EFFECT_ALLELE  NON_EFFECT_ALLELE  EAF       BETA        SE         PVALUE    INFO      HWE
chr:1:10177:AC:A  1    10177  A              AC                 0.376827  -0.0447626  0.0316126  0.156783  0.422784  0.936182
chr:1:10352:TA:T  1    10352  T              TA                 0.43176   0.00727013  0.0309617  0.814356  0.427932  0.680802

相关内容