2016-01-27 3 views
1

Дан входной файл, который выглядит следующим образом:Regular Expression Issue - кот

>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 

Может кто-нибудь предложить, почему это не работает и какова будет работа?

ответ

1

Первая проблема заключается в том, что \. соответствует только периоду (.). Вы хотите использовать его unescaped. \d+ тоже будет хорошо.

Вторая проблема заключается в том, что .+ заставляет .* соответствовать одному символу меньше, чем в противном случае. Избавиться от этого.

perl -pe's/^>Scaffold(.*)/Scaffold$1\tisogroup$1/' test.fasta >output.tab 
+0

Большое спасибо Ikegami! Ваш ответ отлично работает. Чтобы просто быть понятным, '.. *)' Фиксирует как можно больше символов в таблице ASCII, следующей за «Scaffold». Мой _error_ включал '. +' После, если, как это работает, вроде ** вычитания **? –

+1

'. +' Означает совпадение с одним или несколькими символами. Регулярное выражение недействительно, если оно не может, поэтому оно возвращается назад - берет один символ из загрузки, совпадающего с символом '. *', И позволяет '. +' Сопоставлять его. – Sobrique

+0

Спасибо, что помогли мне понять это более подробно. Я очень ценю это. –