Kodomo

Пользователь

Учебная страница курса биоинформатики,
год поступления 2018

Практикум 8: bash сценарии, sed

Формат отчёта: файлы bash-сценариев, все они должны располагаться в папке ~/term2/pr8 (за исключением .bash_profile), иметь правильное имя и права rwx---r-- (опять за исключением .bash_profile, для него права rw-r--r--).

Обязательно запишитесь в очередь, номер практикума – 8. Указывать адрес папки в очереди не нужно, сам найду)

Дедлайны: 02:00 a.m. 10 апреля (мягкий) и 02:00 a.m. 17 апреля (жесткий).

Обязательно используйте UTF-8 в качестве кодировки текста и разделитель строк UNIX (символ \n, он же 'перевод строки', он же 0A, он же Line Feed или LF).

Еще раз обратите внимание на имена и права файлов. Файлы с неправильными именами и правами не проверяются!

Перед выполнением заданий советую ознакомиться с краткими указаниями.

1. Profile + переменные

Заведите в своей домашней директории файл .bash_profile (название начинается с точки) и в нём строку

   1 pt2="/home/export/samba/public/y18/term2"

Разлогиньтесь и снова залогиньтесь на kodomo. Убедитесь, что команды вида:

   1 echo "$pt2"
   2 cd "$pt2"
   3 ls "$pt2/block2"

и т.п. работают как нужно.

Оценка: по наличию файла .bash_profile и нужной строки в нём.

(*) По желанию (не оценивается). Посмотрите, что содержится в переменной PS1 (echo $PS1), эта переменная задаёт вид приглашения командной строки. В man bash долистайте до строки "PROMPTING" (а еще лучше воспользуйтесь поиском в less: /something<Enter> и далее n и N для перехода к следующей и предыдущей находке соответственно) и посмотрите, как можно изменить переменную PS1 и какой от этого будет эффект. Если какой-то вариант вам понравится, внесите его в .bash_profile. Не забывайте защищать спецсимволы bash, в частности обратную косую черту \ и пробел.

2. Сценарий bash без циклов

Сценарий должен называться parse_uniprot.sh.

Прошу прощения, излишне усложнил это задание (не специально). Вы можете считать, что скрипт не принимает запись в текстовом виде на STDIN, а получает название соответствующего текстового файла в первом аргументе. В этом случае Вы легко сможете читать этот файл сколько угодно раз. Если уже сделали по старым тербованиям, ничего переделывать, само собой, не надо.

То есть, команда вызова скрипта будет следующая ./parse_uniprot.sh uniprot_entry.txt.

Напишите сценарий, который получает на стандартный поток ввода (STDIN) запись UniProt в текстовом виде и печатает на стандартный поток вывода (STDOUT) следующую информацию:

  1. идентификатор записи (UniProt ID);

  2. длину белка в а.о.;
  3. *все коды доступа (UniProt AC);

  4. *количество ссылок на источники информации (те, что в полях R*).

Для зачета достаточно пунктов 1 и 2, пункты 3 и 4 добавляют баллы (в сумме до 5).

Выдача скрипта должна быть строго в следующем формате (_ - это один пробел, $ - перенос строки):

Идентификатор_записи:_UniProtID$
Код(ы)_доступа:_UniProtAC1_UniProtAC2_UniProtAC3$
Длина_белка:_NNN_а.о.$
Количество_источников_информации:_M$

То есть нужно вывести ровно одну строку на каждый выполненный пункт в указанном порядке.

Ваш скрипт не должен создавать временных файлов! Иначе у меня (а значит и у вас) могут возникнуть проблемы при проверке. Для хранения информации используйте переменные (если нужно, можно и без них обойтись).

Далее приведены примеры вызова скрипта (на записях p0adi7 и q16653 надо проверить свой скрипт обязательно):

   1 ...$ entret -filter "sw:p0adi7" | ./parse_uniprot.sh
   2 Идентификатор записи: YECD_ECOLI
   3 Код(ы) доступа: P0ADI7 P37347 P76287
   4 Длина белка: 188 а.о.
   5 Количество источников информации: 6
   6 ...$ entret -filter "sw:q16653" | ./parse_uniprot.sh
   7 Идентификатор записи: MOG_HUMAN
   8 Код(ы) доступа: Q16653 A6NDR4 A6NNJ9 A8MY31 B0UZR9 E9PGF0 F8W9D5 O00713 O00714 O00715 Q13054 Q13055 Q14855 Q29ZN8 Q56UY0 Q5JNX7 Q5JNY1 Q5JNY2 Q5JNY4 Q5SSB5 Q5SSB6 Q5STL9 Q5STM0 Q5STM1 Q5STM2 Q5STM5 Q5SUK5 Q5SUK7 Q5SUK8 Q5SUK9 Q5SUL0 Q5SUL1 Q8IYG5 Q92891 Q92892 Q92893 Q92894 Q92895 Q93053 Q96KU9 Q96KV0 Q96KV1 Q99605
   9 Длина белка: 247 а.о.
  10 Количество источников информации: 13

3. Сценарий bash с циклом

Сценарий должен называться count_aa.sh.

Напишите сценарий, который принимает в командной строке одно из однобуквенных обозначений аминокислотных остатков и выдаёт количество этого остатка в каждом из файлов текущей директории, имеющих расширение .fasta. Выходной формат произвольный, единственное требование – должно быть понятно, какому файлу соответствует каждое число.

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

4. *Генератор HTML таблиц (дополнительное)

Сценарий должен называться tsv_to_html.sh.

Создайте скрипт, который получает название TSV файла (текстовая таблица с <Tab> в качестве разделителя столбцов) и выводит соответствующую таблицу в формате HTML на стандартный поток вывода (достаточно только того, что должно быть между тегами <table> и </table>). Задача минимум – получить таблицу, которая будет правильно отображаться после вставки между <table> и </table> в HTML-страничку (и валидатор HTML не будет ругать такую страницу). Все дальнейшие усложнения будут как-то оцениваться. Например,

Подсказка: все минимальные требования можно реализовать с помощью 3 инструкций sed.