使用sed / awk修复格式错误的文件

时间:2015-10-24 17:05:51

标签: regex awk sed

我有一个格式错误的变体调用文件,我正在尝试修复。我一直试图找到解决问题的方法,但遇到了一些麻烦。这是文件的片段:

##fileformat=VCFv4.1
##fileDate=20151024
##INFO=<ID=ALT,Number=1,Type=String,Description="Allele B">
##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
#CHROM  POS ID  REF ALT QUAL    FILTER  INFO    FORMAT  D00270
1   167945  .   C       .   .   ALT=T   GT  0/0
1   290868  .   G   T   .   .   ALT=T   GT  0/1
1   700273  .   A   C   .   .   ALT=C   GT  0/1
1   744314  .   G   A   .   .   ALT=A   GT  1/0
1   765121  .   A   G   .   .   ALT=G   GT  0/1
1   1047386 .   G   A   .   .   ALT=A   GT  1/0
1   1113115 .   T   C   .   .   ALT=C   GT  1/0
1   1623724 .   G       .   .   ALT=A   GT  0/0
1   1627611 .   G       .   .   ALT=C   GT  0/0
1   1664597 .   T   C   .   .   ALT=C   GT  1/1
1   1670775 .   T   C   .   .   ALT=C   GT  1/1

在某些情况下,ALT列中没有任何内容,但需要按顺序在下游分析中正确形成文件并使用它。 位于ALT列中的数据位于INFO列中ALT =的右侧。如何使用INFO列中等号右侧的字母替换ALT列中的空白数据?理想的输出看起来像这样:

##fileformat=VCFv4.1
##fileDate=20151024
##INFO=<ID=ALT,Number=1,Type=String,Description="Allele B">
##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
#CHROM  POS ID  REF ALT QUAL    FILTER  INFO    FORMAT  D00270
1   167945  .   C   T   .   .   ALT=T   GT  0/0
1   290868  .   G   T   .   .   ALT=T   GT  0/1
1   700273  .   A   C   .   .   ALT=C   GT  0/1
1   744314  .   G   A   .   .   ALT=A   GT  1/0
1   765121  .   A   G   .   .   ALT=G   GT  0/1
1   1047386 .   G   A   .   .   ALT=A   GT  1/0
1   1113115 .   T   C   .   .   ALT=C   GT  1/0
1   1623724 .   G   A   .   .   ALT=A   GT  0/0
1   1627611 .   G   C   .   .   ALT=C   GT  0/0
1   1664597 .   T   C   .   .   ALT=C   GT  1/1
1   1670775 .   T   C   .   .   ALT=C   GT  1/1

感谢您提出的任何建议。如果有用,则文件以制表符分隔。

1 个答案:

答案 0 :(得分:0)

你可以尝试,

awk -vOFS="\t" '
    NF==9 && $0 !~ /^#/ {
        split($7,a,"=");      #extract base from column 7
        $4=$4"\t"a[2];        #Adding column
    } 
    $0 !~ /^##/ {$1=$1;}      #recompile $0 with output field separator
    1' file                   #print

你明白了,

##fileformat=VCFv4.1
##fileDate=20151024
##INFO=<ID=ALT,Number=1,Type=String,Description="Allele B">
##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
#CHROM  POS ID  REF ALT QUAL    FILTER  INFO    FORMAT  D00270
1   167945  .   C   T   .   .   ALT=T   GT  0/0
1   290868  .   G   T   .   .   ALT=T   GT  0/1
1   700273  .   A   C   .   .   ALT=C   GT  0/1
1   744314  .   G   A   .   .   ALT=A   GT  1/0
1   765121  .   A   G   .   .   ALT=G   GT  0/1
1   1047386 .   G   A   .   .   ALT=A   GT  1/0
1   1113115 .   T   C   .   .   ALT=C   GT  1/0
1   1623724 .   G   A   .   .   ALT=A   GT  0/0
1   1627611 .   G   C   .   .   ALT=C   GT  0/0
1   1664597 .   T   C   .   .   ALT=C   GT  1/1
1   1670775 .   T   C   .   .   ALT=C   GT  1/1