Как вернуть заданные c частей строки символов из каждой строки? - PullRequest
0 голосов
/ 08 февраля 2020

У меня есть файл (gencode.vM23.transcripts.fa), который содержит много строк, в которых есть несколько идентификаторов гена, а также последовательность. Каждая строка начинается с> и представляет новый ген

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

>ENSMUST00000193812.1|ENSMUSG00000102693.1|OTTMUSG00000049935.1|OTTMUST00000127109.1|4933401J01Rik-201|4933401J01Rik|1070|TEC|
AAGGAAAGAGGATAACACTTGAAATGTAAATAAAGAAAATACCTAATAAAAATAAATAAA
AACATGCTTTCAAAGGAAATAAAAAGTTGGATTCAAAAATTTAACTTTTGCTCATTTGGT
ATAATCAAGGAAAAGACCTTTGCATATAAAATATATTTTGAATAAAATTCAGTGGAAGAA
TGGAATAGAAATATAAGTTTAATGCTAAGTATAAGTACCAGTAAAAGAATAATAAAAAGA
AATATAAGTTGGGTATACAGTTATTTGCCAGCACAAAGCCTTGGGTATGGTTCTTAGCAC
TAAGGAACCAGCCAAATCACCAACAAACAGAGGCATAAGGTTTTAGTGTTTACTATTTGT
ACTTTTGTGGATCATCTTGCCAGCCTGTAGTGCAACCATCTCTAATCCACCACCATGAAG
GGAACTGTGATAATTCACTGGGCTTTTTCTGTGCAAGATGAAAAAAAGCCAGGTGAGGCT
GATTTATGAGTAAGGGATGTGCATTCCTAACTCAAAAATCTGAAATTTGAAATGCCGCCC

Ответы [ 3 ]

2 голосов
/ 08 февраля 2020

Это зависит от того, содержит ли ваш файл данных ' ' (пробелы), показанный в вашем вопросе, и является ли число полей, разделенных '|', постоянным для каждой строки. Учитывая, что некоторые из ваших полей имеют пробел после '|', а другие нет, похоже, что пробелы являются результатом вставки длинной строки в ваш вопрос.

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

Если в каждой строке одинаковое количество полей и разделителей ('|'), решение awk тривиально, если 1-е поле всегда начинается с "ENSMUST..." (или с ">ENSMUST...", если '>' включен в файл) и 9-е поле является вашей последовательностью генов, тогда вы можете сделать:

awk -F '|' '{print $1 "|" $9}' infile > newoutfile

Если формат строки не постоянен

Если формат строки не является постоянным в зависимости от количества полей или поля, в котором встречается поле, начинающееся с "ENSMUST...", и вашей последовательности генов, вам необходимо проверить наличие и выведите поле, в котором они находятся. Одно из предположений состоит в том, что поле с "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

Над вами просто l oop над каждым полем, пока не будет найдено поле, начинающееся с "ENSMUST..." (за ним следует разделитель '|') , а затем продолжайте цикл до тех пор, пока не будет найдено поле, состоящее только из символов [ACGT] (как использовано выше, вы проверяете и отбрасываете любое поле, в котором есть что-то отличное от ACGT, и выходите из l oop, как только ген последовательность найдена и выведена.

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

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

ENSMUST00000193812.1|AAGGAAAGAGGATAACACTTGAAA.....

или если в файле есть '>':

>ENSMUST00000193812.1|AAGGAAAGAGGATAACACTTGAAA.....

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

0 голосов
/ 09 февраля 2020

Если вы хотите удалить все подстроки, начинающиеся с |, используйте

cut -d'|' -f1 gencode.vM23.transcripts.fa
0 голосов
/ 08 февраля 2020

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

grep ^'>' gencode.vM23.transcripts.fa | cut -d '|' -f1 > subset
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...