Bud*_*ian 3 sed awk perl bioinformatics
我有一个序列文件,想用它的出现位置和长度来计算连续字符“N” 假设我有一个mySequence.fasta
像这样命名的文件:
>sequence-1
ATCGCTAGCATNNNNNNNNNNNNNNCTAGCATCATGCNNNNNNATACGCATCACANNNNNNNNNCgcatATCAC
Run Code Online (Sandbox Code Playgroud)
和预期的输出应该是这样的:
Position 12 N 14
Position 38 N 6
Position 56 N 9
Run Code Online (Sandbox Code Playgroud)
请帮助我通过awk
或sed
提供我的文件名来解决这个问题mySequence.fasta
Sté*_*las 10
你可以用 来做到这一点awk
,它的match()
设置RSTART
和RLENGTH
变量对此非常有用:
<mySequence.fasta awk -v C=N '{
i=0
while (match($0, C "+")) {
printf "Position %d %s %d\n", i+RSTART, C, RLENGTH
i += RSTART+RLENGTH-1
$0 = substr($0, RSTART+RLENGTH)
}}'
Run Code Online (Sandbox Code Playgroud)
或者perl
使用记录匹配开始和结束的@-
和@+
数组:
perl -ne 'printf "Position %d N %d\n", $-[0]+1, $+[0]-$-[0] while /N+/g'
Run Code Online (Sandbox Code Playgroud)
使用(实验性)正则表达式运算符的另一种稍快(至少在我的版本中perl
)perl
方法:(?{...})
perl -ne '0 while /N(?{$s=pos})N*(?{printf "Position %d N %s\n", $s, pos()-$s+1})/g'
Run Code Online (Sandbox Code Playgroud)