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