簡體   English   中英

使用sed / awk修復格式錯誤的文件

[英]using sed/awk to fix a malformed file

我有一個格式錯誤的變體調用文件,我正在嘗試修復。 我一直在嘗試找出一種解決方法,但遇到了一些麻煩。 這是該文件的一個片段:

##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

感謝您提出的任何建議。 如果有幫助,則用制表符分隔文件。

你可以試試,

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM