给定一个如下所示的输入文件:
>Scaffold1
AACTGTGCCTATTTGGGCATCCGTCAGGAAAATATTGTCGCCCTCGGTGCATAAACCCATCGGCTGACCAAAGGCTGCAAAGCTGCCAGAACCGTTCCTGTTTCCTTCTTCTCCGGTACCAGCAATGACTGTAACAGTGCCGTTTCTGTCAAGGTGCATTACTTGACGCCTTGTCTGGTCGGTGAAAGCTACTTTCCCGTCTGAAAGTGGGGCAACTGCCTGTATACCGGAACTTGCTTGCCCTGCATCAGCCATGGCGTACTCTTTCACCTCCTGATTTGTTATTTTGACTTTGGTGATGCCTTTGTTGTGTGCCATAACAAGATATCCATCGGTAGATAAGCACATGCTTCGAACCTTACCTCATAGCGGTGTAAAATCACAAAACTTAGTGACTGTT
>Scaffold2
CTTTATAGAGTTTATCGATATCATGGCCGTACAAAGAAGCGCTTAATTTCTAAGGTCATCTTAGAAGCTTCGTAAACACACATTAATGTTAATGAGCTTCCTCGCCTGACAGCATCCTCGCTGCAGGACCCAACAGTGGAGGGGAAGCGGCACAGACCTTGAGGTATGGGTGCGTATGGGTGCACAATGACCTAATACGTGAATATTGATCAAATTCTAAAAAGTTACCATGAATTGAGTGTTTATTCGTATAGGGTGTTTCCTCTCAAACACGGCACCGTTATAAAACAAACAATTTCAGTTCAAATAGTTAAAAAGC
>Scaffold3
TGTTGCTTTTTCTCCTTGGTGGATGCTGCAGTTACAGACTTTCTTTTCCGGCAACAATTTAAATAATGTTCTGTGGAAAAAACGACATGTAATTATTTTGATTCGAGGTCAAACGTTGACCCAGTATTTAGTCCAGTATGACTAATTATCAATACTTTAACAAATTTACGTCATTTCTTCATGCGTCTGTCCTGTTATTGTTCATGAATTTCGTCAAAACATTGTCCGCAGACTGCTTG
我希望输出看起来像这样:
Scaffold1 isogroup1
AACTGTGCCTATTTGGGCATCCGTCAGGAAAATATTGTCGCCCTCGGTGCATAAACCCATCGGCTGACCAAAGGCTGCAAAGCTGCCAGAACCGTTCCTGTTTCCTTCTTCTCCGGTACCAGCAATGACTGTAACAGTGCCGTTTCTGTCAAGGTGCATTACTTGACGCCTTGTCTGGTCGGTGAAAGCTACTTTCCCGTCTGAAAGTGGGGCAACTGCCTGTATACCGGAACTTGCTTG
Scaffold2 isogroup2
CTTTATAGAGTTTATCGATATCATGGCCGTACAAAGAAGCGCTTAATTTCTAAGGTCATCTTAGAAGCTTCGTAAACAACACATTAATGTTAATGAGCTTCCTCGCCTGACAGCATCCTCGCTGCAGGACCCAACAGTGGAGGGGAAGCGGCACAGACCTTGAGGTATGGGTGCGTATGGGTGCACAATGACCTAATACGTGAATATTGATCAAATTCTAAAAAGTTACCATGAATTGAGTGTTTATTCGTATAGGGTGTTTCCTCTCAAACACGGCACCGTTATAAAACAAACAATTTCAGTTCAAATAGTTAAAAAGC
Scaffold3 isogroup3
TGTTGCTTTTTCTCCTTGGTGGATGCTGCAGTTACAGACTTTCTTTTCCGGCAACAATTTAAATAATGTTCTGTGGAAAAAACGACATGTAATTATTTTGATTCGAGGTCAAACGTTGACCCAGTATTTAGTCCAGTATGACTAATTATCAATACTTTAACAAATTTACGTCATTTCTTCATGCGTCTGTCCTGTTATTGTTCATGAATTTCGTCAAAACATTGTCCGCAGACTGCTTG
我似乎无法弄清楚正则表达式是否有效。
我试过第一次尝试:cat test.fasta | perl -pe 's/>Scaffold(\.*).+/Scaffold$1$2\tisogroup$1/' >transcriptome_seq2iso.tab
但这只是输出:
Scaffold isogroup
AACTGTGCCTATTTGGGCATCCGTCAGGAAAATATTGTCGCCCTCGGTGCATAAACCCATCGGCTGACCAAAGGCTGCAAAGCTGCCAGAACCGTTCCTGTTTCCTTCTTCTCCGGTACCAGCAATGACTGTAACAGTGCCGTTTCTGTCAAGGTGCATTACTTGACGCCTTGTCTGGTCGGTGAAAGCTACTTTCCCGTCTGAAAGTGGGGCAACTGCCTGTATACCGGAACTTGCTTGCCCTGCATCAGCCATGGCGTACTCTTTCACCTCCTGATTTGTTATTTTGACTTTGGTGATGCCTTTGTTGTGTGCCATAA
Scaffold isogroup
CTTTATAGAGTTTATCGATATCATGGCCGTACAAAGAAGCGCTTAATTTCTAAGGTCATCTTAGAAGCTTCGTAAACACACATTAATGTTAATGAGCTTCCTCGCCTGACAGCATCCTCGCTGCAGGACCCAACAGTGGAGGGGAAGCGGCACAGACCTTGAGGTATGGGTGCGTATGGGTGCACAATGACCTAATACGTGAATATTGATCAAATTCTAAAAAGTTACCATGAATTGAGTGTTTATTCGTATAGGGTGTTTCCTCTCAAACACGGCACCGTTATAAAACAAACAATTTCAGTTCAAATAGTTAAAAAGC
Scaffold isogroup
TGTTGCTTTTTCTCCTTGGTGGATGCTGCAGTTACAGACTTTCTTTTCCGGCAACAATTTAAATAATGTTCTGTGGAAAAAACGACATGTAATTATTTTGATTCGAGGTCAAACGTTGACCCAGTATTTAGTCCAGTATGACTAATTATCAATACTTTAACAAATTTACGTCATTTCTTCATGCGTCTGTCCTGTTATTGTTCATGAATTTCGTCAAAACATTGTCCGCAGACTGCTTG
接下来我想我可以在(\d+)
的位置使用(\.*)
,因为可以使用字符\d
代替0到9之间的任何数字。+
表示一个或多个重复。但是输出看起来像:
>Scaffold1
AACTGTGCCTATTTGGGCATCCGTCAGGAAAATATTGTCGCCCTCGGTGCATAAACCCATCGGCTGACCAAAGGCTGCAAAGCTGCCAGAACCGTTCCTGTTTCCTTCTTCTCCGGTACCAGCAATGACTGTAACAGTGCCGTTTCTGTCAAGGTGCTTACTTGACGCCTTGTCTGGTCGGTGAAAGCTACTTTCCCGTCTGAAAGTGGGGCAACTGCCTGTATACCGGAACTTGCTG
>Scaffold2
CTTTATAGAGTTTATCGATATCATGGCCGTACAAAGAAGCGCTTAATTTCTAAGGTCATCTTAGAAGCTTCGTAAACACACATTAATGTTAATGAGCTTCCTCGCCTGACAGCATCCTCGCTGCAGGACCCAACAGTGGAGGGGAAGCGGCACAGACCTTGAGGTATGGGTGCGTATGGGTGCACAATGACCTAATACGTGAATATTGATCAAATTCTAAAAAGTTACCATGAATTGAGTGTTTATTCGTATAGGGTGTTTCCTCTCAAACACGGCACCGTTATAAAACAAACAATTTCAGTTCAAATAGTTAAAAAGC
>Scaffold3
TGTTGCTTTTTCTCCTTGGTGGATGCTGCAGTTACAGACTTTCTTTTCCGGCAACAATTTAAATAATGTTCTGTGGAAAAAACGACATGTAATTATTTTGATTCGAGGTCAAACGTTGACCCAGTATTTAGTCCAGTATGACTAATTATCAATACTTTAACAAATTTACGTCATTTCTTCATGCGTCTGTCCTGTTATTGTTCATGAATTTCGTCAAAACATTGTCCGCAGACTGCTTG
任何人都可以建议为什么这不起作用以及解决方法是什么?
答案 0 :(得分:1)
第一个问题是\.
只匹配句点(.
)。你想用它去转义。 \d+
也没关系。
第二个问题是.+
强制.*
匹配的字符少于其他字符。摆脱它。
perl -pe's/^>Scaffold(.*)/Scaffold$1\tisogroup$1/' test.fasta >output.tab