[英]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.