列之间的匹配 [英] Match between the columns

查看:22
本文介绍了列之间的匹配的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个文件。首先,我想看看第一个文件中的&Quot;Variant_Type&Quot;列。如果是DEL,那么我应该检查两个文件(染色体、VCF_pos、Reference_Allele)中的三个列是否匹配,并将第一个文件中的AC和AF列追加到第二个文件中。如果它位于";Variant_Type";中,则查找两个文件中的另外三列(染色体、VCF_pos、Tumor_Seq_Allele2)之间的匹配项,并附加第二个文件中相关的AC和AF列。如果是SNP,则再次查找两个文件(染色体、VCF_pos、Tumor_Seq_Allele2)中另外三列之间的匹配项,并追加第二个文件中相关的AC和AF列。

这是文件1的摘录

Hugo_Symbol Chromosome Start_Position End_Position Reference_Allele Tumor_Seq_Allele2 Variant_Type vcf_pos 
TMEM80      chr11      704605         704605       A                -                 DEL          704604 
OR52P1P     chr11      5726537        5726537      T                -                 DEL          5726536
UBTFL1      chr11      90086720       90086721     -                T                 INS          90086720
DCPS        chr11      126306583      126306584    -                TGGGGA            INS          126306583
DCPS        chr11      126306583      126306584    -                TGGGGAAA          INS          126306583

文件%2

Chromosome vcf_pos      AF       AC      Reference_Allele  Tumor_Seq_Allele2
chr11      704604       0.2      10      A                 - 
chr11      5726536      0.35     13      T                 -
chr11      90086720     0.25     16      -                 T
chr11      126306583    0.5      29      -                 TGGGGA 
chr11      126306583    0.3      39      -                 TGGGGAAA

所需输出

Hugo_Symbol Chromosome Start_Position End_Position Reference_Allele Tumor_Seq_Allele2 Variant_Type vcf_pos   AF   AC 
TMEM80      chr11      704605         704605       A                -                 DEL          704604    0.2  10
OR52P1P     chr11      5726537        5726537      T                -                 DEL          5726536   0.35 13
UBTFL1      chr11      90086720       90086721     -                T                 INS          90086720  0.25 16
DCPS        chr11      126306583      126306584    -                TGGGGA            INS          126306583 0.5  29
DCPS        chr11      126306583      126306584    -                TGGGGAAA          INS          126306583 0.3  39

作为一种可能的解决方案,我考虑在R中使用合并功能,但使用awk可能会更好

推荐答案

使用awk可能会更好

仅供比较-解决方案awk

awk 'BEGIN { while (getline <"File 2" > 0)      # make "dictionary" of AF, AC for ...
             { AFAC1[$1","$2","$5] = $3" "$4    # ... Chr., vcf. and Reference_Allele
               AFAC2[$1","$2","$6] = $3" "$4    # ... Chr., vcf. and Tumor_Seq_Allele2
             }
           }
     NR==1     { print $0" AF AC" }             # first line has column headers
     $7=="DEL" { print $0, AFAC1[$2","$8","$5] }# append the 1st stored AF, AC
     $7=="INS"||
     $7=="SNP" { print $0, AFAC2[$2","$8","$6] }# append the 2nd stored AF, AC
    ' "File 1"

这篇关于列之间的匹配的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆