对于这个痛苦的简单问题,我对脚本相对较新,并提前道歉。我相信我的搜索非常彻底,但显然没有其他答案或烹饪书明确让我理解(如here - 仍然无法得到它)。
我有一个由字母串组成的文件(DNA,如果你关心的话),每行一个字符串。在每个字符串上方,我插入了另一行来标识基础字符串。对于那些生物信息学家,我正在尝试用fasta格式编写测试数据集,也许你有工具?无论如何,我会在每个“>”之后加上一个明确的单词“num”。打算使用bash增量器和sed为每个字符串创建一个唯一的数字。例如,在data.txt中,我有......
> num,blah,blah,blah
ATCGACTGAATCGA
> num,blah,blah,blah
ATCGATCGATCGATCG
> num,blah,blah,blah
ATCGATCGATCGATCG
我希望它是......
> 0,blah,blah,blah
ATCGACTGAATCGA
> 1,blah,blah,blah
ATCGATCGATCGATCG
> 2,blah,blah,blah
ATCGATCGATCGATCG
解决方案可以是任何语言,只要它是完整的&&完成工作。我对sed,awk,bash和c ++有一点经验(小= =略高于没有经验)。我知道,我知道,我需要学习perl,但我才刚开始。问题是:如何将“num”替换为每次替换时增加的数字?如果底层字符串与其他字符串相同则无关紧要。感谢您的帮助!
答案 0 :(得分:8)
perl -ple 's/num/$n++/e' filename
干跑1号,如果这样做,你想要什么
答案 1 :(得分:1)
这使用了流程替换,您的系统可能会也可能不会。
jcomeau@intrepid:/tmp$ exec 3< <(cat test.txt)
jcomeau@intrepid:/tmp$ i=0
jcomeau@intrepid:/tmp$ while read -u 3 first_word the_rest; do
if [ "$first_word" == ">num," ]; then
echo ">$i," $the_rest; i=$((i + 1)); else
echo $first_word $the_rest; fi; done
>0, blah, blah, blah
ATCGACTGAATCGA
>1, blah, blah, blah
ATCGATCGATCGATCG
>2, blah, blah, blah
ATCGATCGATCGATCG