Как вернуть определенные части строки символов из каждой строки?

Как вернуть определенные части строки символов из каждой строки?

08.02.2020 04:36:47 Просмотров 7 Источник

У меня есть файл (генкод.вм23.расшифровки.fa), который содержит много строк, имеющих несколько идентификаторов для гена, а также последовательность. Каждая строка начинается с >, чтобы представить новый ген

Я хочу создать новый файл, который содержит только первую часть информации >ENSMUST00000193812. 1, а также всю последовательность ДНК. А затем сделайте это для всех строк, которые начинаются с">". мне трудно понять, как это сделать. Любая помощь очень ценится

ENSMUST00000193812.1|ENSMUSG00000102693.1|OTTMUSG00000049935.1|OTTMUST00000127109.1|4933401J01Rik-201|4933401J01Rik|1070|TEC| AAGGAAAGAGGATAACACTTGAAATGTAAATAAAGAAAATACCTAATAAAAATAAATAA AACATGCTTTCAAAGGAAATAAAAAGTTGGATTCAAAAATTTAACTTTGCTCATTTGGT ATAATCAAGGAAAAGACCTTTGCATATAAAATATTTTGAATAAAATTCAGTGGAAGAA TGGAATAGAAATATAAGTTTAATGCTAAGTATAAGTACCAGTAAAAGAATAAAAAGA AATATAAGTTGGGTATACAGTTATTTGCCAGCACAAAGCCTTGGGTATGGTTCTTAGCAC TAAGGAACCAGCCAAATCACCAACAAACAGAGGCATAAGGTTTTAGTGTTTACTATTTGT ACTTTTTGTGGATCATTCTTGCCAGCCTGTAGTGCAACCATCTCTAATCCACCACCATGAAG GGAACTGTGATAATTCACTGGGCTTTTTCTGTGCAAGATGAAAAAAAGCCAGGTGAGGCT GATTTATGAGTAAGGGATGTGCATTCCTAACTCAAAAATCTGAAATTTGAAATGCCCCC

У вопроса есть решение - Посмотреть?

Ответы - Как вернуть определенные части строки символов из каждой строки? / How do I return specific parts of a string of characters from every row?

sorpigal

08.02.2020 04:46:23

Без более полного набора выборочных данных (или ответов на некоторые из моих вопросов) трудно быть уверенным, но, вероятно, что-то вроде

grep ^'>' gencode.vM23.transcripts.fa | cut -d '|' -f1 > subset
David C. Rankin

08.02.2020 05:17:47

Это зависит от того, содержит ли ваш файл данных ' ', постоянным для каждой строки. Учитывая, что некоторые из ваших полей имеют пробел послеawk -F '|' ' { for (i=1; i<=NF; i++) if ($i ~ /^>ENSMUST/) # remove the '>' if not actually in file printf "%s|", $1 else if (match($i,/[^ACGT]/)==0) { print $i break } }' infile > newoutfile , а другие-нет, похоже, что пробелы являются результатом вставки длинной строки в ваш вопрос.

Если количество полей постоянно для каждой строки

Если у вас есть одинаковое количество полей и разделителей ( awk -F '|' ' { for (i=1; i<=NF; i++) if ($i ~ /^>ENSMUST/) # remove the '>' if not actually in file printf "%s|", $1 else if (match($i,/[^ACGT]/)==0) { print $i break } }' infile > newoutfile ) в каждой строке, awk -F '|' ' { for (i=1; i<=NF; i++) if ($i ~ /^>ENSMUST/) # remove the '>' if not actually in file printf "%s|", $1 else if (match($i,/[^ACGT]/)==0) { print $i break } }' infile > newoutfile (или с awkесли "ENSMUST..."включено в файл) и 9-е поле-это ваша последовательность генов, то вы можете сделать:

">ENSMUST..."

Если Формат Строки Не Постоянен

Если формат строки не является постоянным по количеству полей, или поле, где один начинается с '>'и ваша последовательность генов произойдет, вам нужно будет проверить наличие каждого и вывести поле, в котором они находятся. Одно предположение состоит в том, что поле с awk -F '|' '{print $1 "|" $9}' infile > newoutfile происходит перед полем с вашей генной последовательностью в линии. Чтобы справиться с этим состоянием, вы могли бы сделать:

"ENSMUST..."

Выше вы просто перелистываете каждое поле до того, которое начинается с '>' это нашли (это выход с последующим разделитель awk -F '|' ' { for (i=1; i<=NF; i++) if ($i ~ /^>ENSMUST/) # remove the '>' if not actually in file printf "%s|", $1 else if (match($i,/[^ACGT]/)==0) { print $i break } }' infile > newoutfile ), а затем продолжить цикл, пока поле только символы "ENSMUST..." не найдено (как в приведенном выше, вы проверить и отбросить любое поле, которое есть нечто иное, чем '|' внутри нее и выход из цикла после того, как последовательности гена найден и выход.

Пример Использования / Вывода

В любом случае выше, ваш [ACGT] будет содержать поля:

ACGT

или если "ENSMUST..."находится в файле:

ENSMUST00000193812.1|AAGGAAAGAGGATAACACTTGAAA.....

Посмотрите все это и дайте мне знать, если это то, что вы намеревались и есть ли у вас какие-либо дополнительные вопросы.

https://stackoverflow.com/questions/60123190/how-do-i-return-specific-parts-of-a-string-of-characters-from-every-row/60123359#comment106338285_60123359
++ve для очень описательного и приятного кода.
https://stackoverflow.com/questions/60123190/how-do-i-return-specific-parts-of-a-string-of-characters-from-every-row/60123359#comment106338469_60123359
Спасибо, сэр! Немного двусмысленности, чтобы иметь дело, но должно быть разумно покрыто.
Закрыть X