我有一个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个零(并非总是如此),在。之前的数字。
g之后的数字。重复两次,用制表符分隔
>之前的字母
>后的字母
添加使用
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
谢谢:)
这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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句