删除以唯一模式开头的行中的字符

时间:2013-06-10 20:53:06

标签: regex sed awk fasta

我有一个由许多条目组成的文件,如下所示:

>1761420406686363113470.1
CAAGATTCTGAGATAATCGCGGTTTAAAGTTTCAAATTTGTTTCGGCCGATTCGAAGTCA

即。以>开头的标题行和许多行序列,后面是标题行。 我正在尝试编写一个sed脚本,该脚本只包含以>开头的行。 (不是序列行)并删除除前10个数字之外的所有数字。

对此有很多类似的问题,但我无法弄清楚。我一直在尝试对此代码进行修改:

sed 's/^>..........*/^>........../' input.fasta

但显然我做得不对..

4 个答案:

答案 0 :(得分:3)

这可能适合你(GNU sed):

sed -r 's/^(>.{10}).*/\1/p;d' file

如果要保留序列行,则删除除了那些被替换的行之外的所有行:

sed -r 's/^(>.{10}).*/\1/' file

应符合条例草案。

答案 1 :(得分:1)

您必须在括号中捕获前10个字符:

sed -e 's/^\(>..........\).*/\1/'

可以缩短为

sed -e 's/^\(>.\{10\}\).*/\1/'

答案 2 :(得分:1)

作为sed的替代品,使用cut

$ echo ">1761420406686363113470.1" | cut -c1-11
>1761420406

要在以>开头的行上操作,请将其包装在bash-while-loop中

$ while read line; do if [[ $line == \>* ]]; then cut -c1-11 <<< $line; else echo $line; fi done < input
>1761420406
CAAGATTCTGAGATAATCGCGGTTTAAAGTTTCAAATTTGTTTCGGCCGATTCGAAGTCA

或使用awk:

$ awk '{if ($0 ~ />/){print substr($0,0,11)}else{print}}' input
>1761420406
CAAGATTCTGAGATAATCGCGGTTTAAAGTTTCAAATTTGTTTCGGCCGATTCGAAGTCA

答案 3 :(得分:0)

由于已发布好sed个答案,因此这是一个`GNU-awk解决方案。

gawk '/^>/{print gensub(/(.{11}).*/,"\\1","G",$1);next }1' inputFile