Учебная страница курса биоинформатики,
год поступления 2024
Упражнения
Упражнения обязательно нужно выполнить полностью. Если не успели во время занятия, то проделайте после. Но в отчете их отражать не нужно.
Grep
(grep) Выведите все строчки файла /P/y24/term1/pr6.txt, которые содержат слово qwerty.
(grep, less) Выведите все строчки файла /P/y24/term1/pr6.txt, которые содержат слово qwerty в любом регистре букв. Посмотрите эти строки в less.
(grep, wc) Выведите все строчки файла /P/y24/term1/pr6.txt, которые начинаются на qwerty в любом регистре. Сколько таких строк? Как можно посчитать нужные строки с помощью только grep без wc?
(grep) Выведите все строчки файла /P/y24/term1/pr6.txt, которые заканчиваются на qwerty в любом регистре.
Выведите все строчки файла /P/y24/term1/pr6.txt, которые полностью равны qwerty (без учета регистра).
* (grep -e) Выведите все строчки файла /P/y24/term1/pr6.txt, которые либо начинаются на qwerty, либо заканчиваются на qwerty.
Выведите все строчки файла /P/y24/term1/pr6.txt, которые содержат слово ^qwerty.
Выведите все строчки файла /P/y24/term1/pr6.txt, которые содержат слово qwerty$.
Выведите все строчки файла /P/y24/term1/pr6.txt, которые заканчиваются на qwerty$.
Из файла со скаченным геномом бактерии в формате fasta выведите только строки заголовков (они начинаются на >). Сколько в файле последовательностей "репликонов" (т.е. отдельных молекул ДНК: хромосом или плазмид)?
Права доступа
У вас есть возможность изменения прав доступа для всех файлов и папок, которые вы создали. Используйте её только когда это действительно необходимо, почти всегда стандартные права доступа должны вас устраивать. Из этого правила есть всего два исключения: право на исполнение скриптов, содержащих shebang (давайте его только себе), и исправление прав доступа файлов, скопированных с других компьютеров. У таких файлов могут сохраняться странные права. Таким файлам можно смело давать право на чтение для всех, если его еще нет. Все равно доступ в вашу домашнюю папку имеет только весьма ограниченный круг пользователей.
Не меняйте права доступа в домашнюю папку, даже если они вам кажутся странными!
Создайте папку ~/term1/pr6, дальше все делайте исключительно в этой папке, если явным образом не указано обратное.
(chmod) Скопируйте сценарий ~/term1/credits/pr5.sh в папку ~/term1/pr6. Cделайте из него полноценный исполняемый файл: добавьте shebang и установите для владельца право на исполнение. Запустите сценарий на исполнение из папки ~/term1/genome без указания интерпретатора (то есть первым (нулевым) аргументом команды должно быть имя файла сценария). Скопируйте таблицу локальных особенностей генома в папку ~/term1/pr6. Теперь вам надо запустить скрипт из этой папки, при правильном запуске ошибки возникнуть не должно. Только не испортите в процессе исходный скрипт, все операции производите с копией!
(which) Определите, где на kodomo лежат исполняемые файлы bash, env, ls, file и т.д.
(file) Узнайте, что программа file пишет про исполняемый файл bash, про исполняемый файл env, про ваш скрипт из credits, про его новый вариант из pr6.
Создайте папку test внутри pr6. Какие права у вас есть на эту папку? Скопируйте в эту папку скрипт pr5.sh.
- Теперь изменяйте права для себя (owner) на эту папку и пробуйте просматривать её содержимое, переименовывать или просматривать в ней файлы. Убедитесь, что права на папки работают именно так, как рассказали преподаватели.
Убедитесь, что у вас есть права rx на папку pr6 и перейдите в нее. Изменяйте права для себя на файл скрипта, и пробуйте его редактировать, запускать или просматривать. Убедитесь, что права на файлы работают именно так, как рассказали преподаватели.
Перейдите в папку ~/term1/pr6 и удалите папку test со всем содержимым. Какие для этого понадобятся права?
Обязательные задания
Мягкий дедлайн – 01:00 AM 18 октября, жесткий дедлайн – 01:00 AM 25 октября. После мягкого дедлайна штраф 0.5 балла, после жесткого – 2 балла.
Результат выполнения каждого задания должен быть полноценным сценарием bash, т.е. должен содержать правильный shebang, и как минимум владелец файла (т.е. вы) должен иметь право на его исполнение. Перед записью в очередь на проверку обязательно нужно проверить каждый сценарий, запустив его на тестовом примере.
В таблице локальных особенностей генома (feature_table) каждая строка (запись) соответствует одной "локальной особенности" (feature) – некоторому участку последовательности, которому приписана функция. Локальные особенности бывают разных типов, например, gene (любой ген, белок-кодирующий, РНК-кодирующий, псевдоген), CDS (белок-кодирующая последовательнось), tRNA (участок ДНК, кодирующий тРНК) и т.д. Тип записи указан в первой колонке. Список типов фиксированный, у каждого типа есть принятое обозначение. Почти любой анализ таблицы локальных особенностей должен начинаться с отбора записей только нужного типа (или типов). Так как колонка первая, а все обозначения типов фиксированные, то это надежно можно делать даже с помощью grep.
grep '^tRNA' feature_table.tsv | ... # отбор записей про гены тРНК
1. Подсчет количества генов рРНК в таблице локальных особенностей
Ваша задача – написать скрипт ~/term1/credits/count_rRNA.sh, который принимает на вход (STDIN) таблицу локальных особенностей (feature_table) и выводит (STDOUT) количество генов каждой из рРНК на прямой и обратной цепях ДНК. Нулевые значения выводить не нужно. В выдаче не должно быть символов табуляции, замените их на пробелы, чтобы получилась таблица с фиксированной шириной столбцов. Пробелы в названиях РНК надо (предварительно?) заменить на подчеркивания. Порядок строк неважен, сортируйте на свое усмотрение.
Пример тестового запуска:
kodomo:/$ ~/term1/credits/count_rRNA.sh < '/P/y24/term1/GCF_000008865.2_ASM886v2_feature_table.txt'
5 + 16S_ribosomal_RNA
2 - 16S_ribosomal_RNA
5 + 23S_ribosomal_RNA
2 - 23S_ribosomal_RNA
5 + 5S_ribosomal_RNA
3 - 5S_ribosomal_RNA
kodomo:/$
2. Подсчет количества генов гипотетических белков в таблице локальных особенностей
Ваша задача – написать скрипт ~/term1/credits/count_hypotheticals.sh, который принимает на вход (STDIN) таблицу локальных особенностей (feature_table) и для каждой из молекул ДНК генома выводит (STDOUT) количество генов белков, для которых в процессе аннотации не удалось предположить какую-либо функцию. Такие белки называют "гипотетическими" (hypothetical protein), потому что про них не известно ничего, кроме предполагаемой аминокислотной последовательности. Вы можете считать, что для соответствующих кодирующих участков (CDS) в поле name всегда указано название, оканчивающееся на "hypothetical protein". Обязательным промежуточным этапом должен быть отбор строк, соответствующих именно белок-кодирующим участкам (CDS в первом столбце), мало ли что может означать поле name для участков генома другого типа. Участки генома, которые принадлежат одной молекуле ДНК, имеют одинаковые значения в поле genomic_accession. В выдаче не должно быть нулевых значений, по формату это должна быть таблица с фиксированной шириной столбцов, как в предыдущем пункте, но с сортировкой по убыванию количества генов гипотетических белков.
Пример тестового запуска:
kodomo:/$ ~/term1/credits/count_hypotheticals.sh < '/P/y24/term1/GCF_000008865.2_ASM886v2_feature_table.txt'
756 NC_002695.2
37 NC_002128.1
2 NC_002127.1
kodomo:/$
Обратите внимание, что скрипты принимают все нужные данные на STDIN и выдают данные на STDOUT! Т.е. каждый скрипт должен быть способен работать примерно так, как это делает tr:
echo "DATA" | tr -d 'A' | less
# или
tr -d 'A' < data.txt > output.txt
Скрипты, которые ожидают название файла в качестве аргумента, или, тем более, используют фиксированное название входного/выходного файла, проверять не буду. Т.е. так нельзя:
./script.sh data.txt | less # правда вы пока так и не сможете)
# и так тоже нельзя
./script.sh # а так вполне сможете
Error: data.txt: No such file or directory
3* Вычисление частот старт-кодонов по последовательностям CDS (дополнительное)
Ваша задача – написать скрипт ~/term1/credits/count_codons.sh, который принимает на вход (STDIN) нуклеотидные последовательности белок-кодирующих участков генома в формате fasta (cds_from_genomic.fna) и выводит (STDOUT) количество каждого старт-кодона, который встречается в этом геноме. Выдача – две колонки через табулятор – должна быть отсортирована по убыванию количества кодонов. Должен присутствовать заголовок.
Пример тестового запуска (tr исключительно для демонстрации формата выдачи):
kodomo:/$ ~/term1/credits/count_codons.sh < '/P/y24/term1/GCF_000008865.2_ASM886v2_cds_from_genomic.fna' | tr '\t' '|'
Count|Start_codon
4676|ATG
400|GTG
77|TTG
2|ATT
kodomo:/$