【问题标题】:Replace numeric genotype code with DNA letter用 DNA 字母替换数字基因型代码
【发布时间】:2019-11-20 02:56:18
【问题描述】:

如何用 DNA 字母替换数字基因型代码? 我有一个修改后的 vcf 文件,看起来像这样:

POS REF ALT A2.bam C10.bam 448 T C 0/0:0,255,255 0/0:0,255,255 2402 C T 1/1:209,23,0 xxx:255,0,255 n...

我想用 ref 字母替换 0/0,用 alt 字母替换 1/1 并删除它后面的所有字符串。 它应该是这样的:

POS REF ALT A2.bam C10.bam 448 T C T T 2402 C G G xxx n...

一直在尝试用 sed 来做,但是没有用 不知道怎么处理

【问题讨论】:

    标签: bash unix bioinformatics vcf-variant-call-format


    【解决方案1】:

    请你试试:

    awk '{
        if (NR > 1) {
            for (i=4; i<=5; i++) {
                split($i, a, ":")
                $i = a[1]
                if ($i == "0/0") $i = $2
                if ($i == "1/1") $i = $3
            }
        }
        print
    }' file.txt
    

    输出:

    POS  REF ALT     A2.bam C10.bam
    448 T C T T
    2402 C T T xxx
    n...    
    
    • for 循环处理第 4 列和第 5 列(A2.bamC10.bam)。
    • 首先它切断“:”之后的子字符串。
    • 如果剩余值等于“0/0”,则将其替换为第 2 列 (REF)。
    • 如果是“1/1”,请使用第 3 列 (ALT)。

    希望这会有所帮助。

    【讨论】:

    • file.txt 应该是输入文件吗?它会占用第 5 列之后的所有列吗?
    • 两者都是正确的。 file.txt 指的是您的“修改后的 vcf 文件”。 5th 之后的列将被保留(不变)(如果有)。
    • 太棒了!现在如果我想让它影响所有列?我应该将其更改为 i>=4 并删除 i
    • 如果您有更多列并且想要影响所有列(准确地说是第 4 列及之后),请将行 for (i=4; i&lt;=5; i++) { 替换为 for (i=4; i&lt;=NF; i++) {
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 2016-08-10
    • 2017-05-16
    • 2016-12-22
    相关资源
    最近更新 更多