Работа с файлами генбанка с помощью bash - PullRequest
1 голос
/ 03 августа 2020

У меня есть этот генбанк файл . И мне нужна ваша помощь в управлении им

Я выбираю случайную часть файла

CDS             complement(1750..1956)
                     /gene="MAMA_L4"
                     /note="similar to MIMI_L9"
                     /codon_start=1
                     /product="hypothetical protein"
                     /protein_id="AEQ60146.1"
                     /translation="MHFLDDDNDESNNCFDDKEKARDKIIIDMLNLIIGKKKTSYKCL
                     DYILSEQEYKFAILSIVENSIFLF"
     misc_feature    complement(2020..2235)
                     /note="MAMA_L5; similar to replication origin binding
                     protein (fragment)"
     gene            complement(2461..2718)
                     /gene="MAMA_L6"
     CDS             complement(2461..2718)
                     /gene="MAMA_L6"
                     /codon_start=1
                     /product="T5orf172 domain-containing protein"
                     /protein_id="AEQ60147.1"
                     /translation="MSNNLAFYIITTNYHQSQNIYKIGIHTGNPYDLITRYITYFPDV
                     IITYFQYTDKAKKVESDLKEKLSKCRITNIKGNLSEWIVID"

Моя цель - «извлечь» информацию из / translation = и / product =, как показано ниже

Белок, содержащий домен T5orf172 MSNNLAFYIITTNYHQSQNIYKIGIHTGNPYDLITRYITYFPDV IITYFQYTDKAKKVESDLKEKLSKCRITNIKGNLSEWIVID

* выделен *1011**1014* *1013**, чтобы написать *1011**1014* *1013** проблема была выделена жирным шрифтом * 10 * script, поэтому я подумал применить что-то вроде:

grep -w /product= genebank.file  |cut -d= -f2| sed 's/"//'g  > File1

grep -w /translation= genebank.file  |cut -d= -f2| sed 's/"//'g  > File2  

paste  File1 File2

T проблема в том, что в записях перевода, когда я использую grep, я получил только первую строку. Таким образом, он печатается до жирной линии, такой как белок, содержащий домен T5orf172. MSNNLAFYIITTNYHQSQNIYKIGIHTGNPYDLITRYITYFPDV

Кто-нибудь может помочь мне решить эту проблему? Заранее благодарю!

Ответы [ 2 ]

1 голос
/ 03 августа 2020

С GNU sed:

sed -En '/^\s*\/(product|translation)="/{
    s///
    :a
    /"$/! { N; s/\n\s*//; ba; }
    s/"$//p
    }' file |
sed 'N; s/\n/\t/'

Примечание: предполагается, что за вторым вхождением разделителя " сразу следует новая строка во входном файле.

0 голосов
/ 03 августа 2020

Я не тестировал это полностью, но если вы добавите -A1 в свою команду grep, вы получите одну строку после совпадения.

grep -w /product= genebank.file  |cut -d= -f2| sed 's/"//'g  > File1
grep -A1 -w /translation= genebank.file  |cut -d= -f2| sed 's/^ *//g' > File2
paste  File1 File2

Вам нужно будет удалить эту лишнюю новую строку, но это должно подойди поближе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...