我有一个由许多条目组成的文件,如下所示:
>1761420406686363113470.1
CAAGATTCTGAGATAATCGCGGTTTAAAGTTTCAAATTTGTTTCGGCCGATTCGAAGTCA
即。以>开头的标题行和许多行序列,后面是标题行。 我正在尝试编写一个sed脚本,该脚本只包含以>开头的行。 (不是序列行)并删除除前10个数字之外的所有数字。
对此有很多类似的问题,但我无法弄清楚。我一直在尝试对此代码进行修改:
sed 's/^>..........*/^>........../' input.fasta
但显然我做得不对..
答案 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