我有一个awk解析器,如果数据是NC_0000(四位数),那么效果很好,但如果不是那么,则解析数据。我不确定获得所需输出的最有效方法。谢谢你:)。
代码:
awk 'FNR > 1 && match($0, /NC_0000([0-9]*)\..*g\.([0-9]+)(.)>(.)/, a){ print a[1], a[2], a[2], a[3], a[4] }' OFS='\t' ${id}.txt > ${id}_parse.txt
例如:
NC_000013.10:g.20763466G>A
NC_00001.10:g.20763477C>G
将被解析为
的所需输出13 20763466 20763466 G A
1 20763477 20763477 C G
但是这个
NC_000004.11:g.41749507G>T
无效。下面列出了所需的输出格式,并始终如此。谢谢你:)。
解析规则:
NC_之后的4个零(并非总是如此)和之前的数字。
数字。用标签
>
>
使用
添加awk -F"[_.>]" '{a=length($4);b=substr($4,1,a-1);print $2+0,b,b,substr($4,a),$5}' OFS="\t" Target.txt
0
4004 244 244 G A NC
3924 288 288 C A NC
3924 385 385 G A NC
谢谢:)
答案 0 :(得分:1)
此awk
应该:
cat file
NC_000013.10:g.20763466G>A
NC_00001.10:g.20763477C>G
NC_000004.11:g.41749507G>T
awk -F"[_.>]" '{print $2+0,substr($4,1,8),substr($4,1,8),substr($4,9,1),$5}' OFS="\t" file
13 20763466 20763466 G A
1 20763477 20763477 C G
4 41749507 41749507 G T
如果g.
之后的位数可能会发生变化,请使用:
awk -F"[_.>]" '{a=length($4);b=substr($4,1,a-1);print $2+0,b,b,substr($4,a),$5}' OFS="\t" file