繁体   English   中英

通过AWK脚本写入输出文件时出错

[英]Error in writing output file through AWK scripting

我有一个AWK脚本,可将与特定模式匹配的特定值写入.csv文件。 代码如下:

BEGIN{print "Query Start,Query End, Target Start, Target End,Score, E,P,GC"}
/^\>g/ { Query=$0 }
 /Query =/{
    split($0,a," ")
    query_start=a[3]
    query_end=a[5]
    query_end=gsub(/,/,"",query_end)
    target_start=a[8]
    target_end=a[10]
    }
    /Score =/{
    split($0,a," ")
    score=a[3]
    score=gsub(/,/,"",score)
    e=a[6]
    e=gsub(/,/,"",e)
    p=a[9]
    p=gsub(/,/,"",p)
    gc=a[12]

    printf("%s,%s,%s,%s,%s,%s,%s,%s\n",query_start, query_end,target_start,target_end,score,e,p,gc)
    }

输入文件如下:

>gi|ABCDEF|

 Plus strand results:

 Query = 100 - 231, Target = 100 - 172
 Score = 20.92, E = 0.01984, P = 4.309e-08, GC =  51

但是我收到了.csv文件中的输出,如下所示:

100 0   100 172 0   0   0   51

程序无法复制以下值:查询结束得分EP(注意:所有失败的值都在逗号(,)之前出现)

获得正确输出的任何帮助将是巨大的。

最好的祝福,

阿米特

如@Jidder所述,您无需调用split(),而如@jaypal所述,您使用的gsub()错误,但是如果您只包含了,也根本不需要调用gsub()。 FS。

尝试这个:

BEGIN {
    FS = "[[:space:],]+"
    OFS = ","
    print "Query Start","Query End","Target Start","Target End","Score","E","P","GC"
}
/^\>g/ { Query=$0 }
/Query =/ {
    query_start=$4
    query_end=$6
    target_start=$9
    target_end=$11
}
/Score =/ {
    score=$4
    e=$7
    p=$10
    gc=$13

    print query_start,query_end,target_start,target_end,score,e,p,gc
}

那工作吗 请注意,字段编号被1淘汰,因为当您不使用默认的FS awk时,不再跳过前导空白,因此输入中的空白之前会有一个空白字段。

显然,您没有使用Query变量,因此填充它的行是多余的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM