Учебная страница курса биоинформатики,
год поступления 2020
На переписывании контрольной задания будут отличаться, но проверяться будут те же умения.
Пример выполнения контрольной
1 #! /usr/bin/env bash
2
3 ENT="hedgehog.swiss"
4 CSV="hedgehog.csv"
5 IDS="hedgehog.ids"
6
7 # task 1
8 entret -filter 'sw:*_ERIEU' "${ENT}"
9 # task 2
10 infoseq -help 2> infoseq.help
11 # task 3
12 infoseq -filter -only -name -acc -len -nohead -nocol -delim ',' \
13 "${ENT}" > "${CSV}"
14 # task 4
15 cut -f 1 -d ',' "${CSV}" > "${IDS}"
16 # task 5
17 for id in $(< "${IDS}"); do
18 count=$(entret -filter "${ENT}:${id}" | grep -c '^DR GO;')
19 echo "${id},${count}"
20 done
21 # task 6*
22 grep -c '^OG Mitochondrion' "${ENT}"
23 # task 7*
24 for id in $(< "${IDS}"); do
25 coords="$(
26 entret -filter "${ENT}:${id}" | grep '^FT TRANSMEM' |
27 tr -s ' ' '\t' | cut -f 3
28 )"
29 for coord in ${coords}; do
30 echo -e "${id}\t${coord}"
31 done
32 done
Комментарии
- Названия файлов, используемые несколько раз, для удобства вынесены в переменные.
В пункте 1 обязательно надо использовать entret, ведь нужно скачать именно полные записи. Других способов сделать это в рамках EMBOSS нет.
В пункте 2 обратите внимание на перенаправление только потока STDERR, склеивать его предварительно с STDOUT не совсем правильно, но за это не штрафовал. Вообще всегда нужно понимать, что именно вы делаете, и зачем.
В пункте 3 просто надо было найти нужные опции. Использовано свойство квалификаторов EMBOSS – их названия можно сокращать. Перенос части команды на следующую строку с помощью экранирования переноса строки не обязателен, просто хотел показать такую возможность. Так принято делать, чтобы текст скрипта помещался в столбец ~80 символов, чтобы его можно было просматривать в терминале любыми способами без проблем.
В пункте 4 хорошо бы сообразить, что нужный столбец уже есть в табличке hedgehog.csv. Получается значительно короче и быстрее, чем еще раз мучить infoseq или грепать hedgehog.swiss.
В пункте 5 использована конструкция, про которую сложно догадаться самостоятельно, $(< file). Вполне засчитывал $(cat file), но первый вариант работает чуть быстрее, и мне больше нравится по стилю. Важно было правильно составить паттерн для grep (и не забыть про экранирование спец. символов). Вы знаете формат записи Swiss-Prot, надо считать только подходящие строчки. "GO" (и даже "GO;", но реже) вполне может встречаться в других строках записи.
В пункте 6 тоже важен правильный паттерн. Приведенный в примере позволяет однозначно идентифицировать записи про митохондриальные белки, можете почитать про формат поля OG в справке на сайте UniProt.
Пункт 7 был осознанно сделан практически неподъемным для вас, чтобы студентам, быстро справившимся с остальными заданиями, было чем заняться до конца контрольной вместо "помощи" однокурсникам. В рамках того, что вам рассказывали в прошлом и этом семестре, я не смог придумать способа без использования вложенного цикла. Значительно элегантнее (и надежнее) это можно сделать, например, с помощью sed: