Kodomo

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

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

Работа в классе

Выполнение этих упражнений не проверяется и не оценивается, они призваны помочь в освоении материала. Настоятельно рекомендуем доделать дома все упражнения, которые не успели выполнить в классе.

Манипуляции с текстом

Многие упражнения можно выполнить лишь после чтения справки по указанным командам. Часто будет нужна не команда в чистом виде, а модифицированная какой-нибудь опцией (а иногда и несколькими).

  1. Создайте папку ~/term1/pr5, дальше все делайте в этой папке. Переходить в неё или нет решайте сами, это влияет только на указание путей к файлам. Все пути ниже указаны в абсолютном виде или относительно ~/term1/pr5.

  2. (less) Используйте файл ~/term1/genome/*_feature_table.txt (далее FT), который вы получили при выполнении практикума 2, для изучения опций -S, -N и -U программы less. На примере этого файла разберитесь, как устроены текстовые таблицы в формате TSV.

  3. (cut) Вырежьте первую колонку файла FT. Перенаправьте выдачу в файл col_1.txt. Проверьте содержимое файла.

  4. (cut) Вырежьте две первые колонки из FT и сохраните их в cols.tsv.

  5. (wc) Определите число строк в файле FT? Убедитесь, что количество строк в файлах col_1.txt и cols.tsv не отличается.

  6. (sort) Определите, какие уникальные пары значений встречаются в колонках из cols.tsv (выведите их в терминал).

  7. (sort, uniq) Посчитайте (выведите в терминал) количество повторений для каждой строки из файла col_1.txt. Сколько в исходном файле было строчек CDS? А сколько rRNA?

  8. (head) Выведите 5 первых строк (включая строку заголовков столбцов) из файла FT. Сначала просто напечатайте в терминал, потом перенаправьте в less для интерактивного просмотра. Наверно, будет удобно применить опцию less, позволяющую не переносить длинные строки.

  9. (tail) Выведите все строки FT, кроме первой (иногда нужно удалить строку-заголовок). С помощью перенаправления в wc убедитесь, что строк действительно стало ровно на одну меньше. Посмотрите эти строки в less без предварительной записи в какой-либо файл.

  10. (tr) Выведите в терминал содержимое файла cols.tsv, заменив все символы табуляции на доллары. Ввести табулятор в виде символа в командную строку bash затруднительно, ведь он используется для автодополнения. К счастью, tr понимает обозначения некоторых особых символов, в том числе табулятора. А еще tr не умеет читать файлы, эта программа получает данные только со стандартного потока ввода. Прочитайте справку по tr!

  11. (head, tr) Выведите (в терминал или в less) заголовки столбцов из FT, по одному в строке. Для этого символы табуляции нужно будет заменить на переносы строк. Если передать выдачу на вход программе nl (от number lines), то можно еще и номера столбцов сразу узнать.

  12. (cut, tr) Создайте файл coords.tsv, который будет содержать табличку из трех колонок: start, end и strand, которые будут идентичны соответствующим колонкам файла FT за исключением того, что в колонке strand будут не + и -, а 1 и 0 (для прямой и обратной цепи соответственно).

  13. (sort, uniq, sort) Вывести количества встреч каждой уникальной пары значений из колонок файла cols.tsv, отсортированные по убыванию.

Grep

  1. Выведите все строчки файла /P/y26/term1/pr5.txt, которые содержат последовательность символов "qwerty" (без кавычек).

  2. Выведите все строчки файла /P/y26/term1/pr5.txt, которые содержат qwerty в любом регистре букв. Посмотрите эти строки в less.

  3. Выведите все строчки файла /P/y26/term1/pr5.txt, которые заканчиваются на qwerty в любом регистре.

  4. (grep) Выведите все строчки файла /P/y26/term1/pr5.txt, которые начинаются на qwerty в любом регистре. Сколько таких строк? Как можно посчитать нужные строки с помощью только grep без wc?

  5. Сколько строк файла /P/y26/term1/pr5.txt полностью равны qwerty (c учетом регистра)? Правильный ответ – две (четыре, если игнорировать регистр).

  6. Из файла со скаченным геномом бактерии в формате fasta (он у вас в ~/term1/genome) выведите только строки заголовков (они начинаются на >). Сколько в файле последовательностей "репликонов" (т.е. отдельных молекул ДНК: хромосом или плазмид)?

  7. Выведите все строчки файла /P/y26/term1/pr5.txt, которые содержат 10$ (десять долларов без пробела).

  8. Выведите все строчки файла /P/y26/term1/pr5.txt, которые содержат ^qwerty (именно со знаком крышечки).

  9. Выведите все строчки файла /P/y26/term1/pr5.txt, которые заканчиваются на qwerty$ (да, с символом доллара на конце строки).

  10. Выведите все строчки файла /P/y26/term1/pr5.txt, которые либо начинаются на qwerty, либо заканчиваются на qwerty (см. рамку ниже).

У grep есть опция -e которая принимает поисковый паттерн в качестве аргумента. Если эта опция указана, то все позиционные аргументы считаются именами файлов. Смысл этой опции в том, что её можно указывать несколько раз. В этом случае grep будет выводить строки с находкой любого из заданных паттернов.

Если вам требуется отобрать строки, содержащие не любой, а каждый из нескольких паттернов, то используйте несколько последовательных grep в конвейере, опция -e в таком случае вам не нужна.

Сценарии

Сценарий (в разговорной речи "скрипт") – это текстовый файл, содержащий набор команд. У bash (как и у других интерпретаторов команд) есть неинтерактивный режим работы, в котором он последовательно выполняет команды из сценария. Такой режим активируется, если при запуске bash передать имя сценария в качестве первого аргумента.

-- запуск еще одного bash в интерактивном режиме (странное занятие)
user@kodomo:~$ bash
 ... можно выполнять команды, но это "вложенная" сессия
-- завершение "вложенной" сессии и возврат к "основной"
user@kodomo:~$ exit
user@kodomo:~$

-- запуск bash в неинтерактивном режиме для выполнения сценария
user@kodomo:~$ bash script.txt
 ... выполняются команды из script.txt
 ... после чего работа "вложенного" bash завершается
user@kodomo:~$ 

Есть возможность запуска сценариев напрямую, т.е. без указания интерпретатора. Но этот способ требует дополнительных знаний и умений и выходит за рамки курса.

  1. Перейдите в папку ~/term1/pr5.

  2. С помощью nano создайте файл script.sh (bash-сценариям принято давать расширение .sh или .bash), который будет содержать команду echo 'Выполняется команда из сценария.'

  3. Выполните сценарий script.sh с помощью запуска bash в неинтерактивном режиме.

  4. Выполните сценарий еще раз, не изменяя его, записав выдачу в файл script.out. Нужно использовать перенаправление потока вывода в момент запуска сценария.

  5. Отредактируйте script.sh, дописав в него команду echo '... и еще одна команда из сценария.' с новой строки. Сохраните сценарий и выполните его.

  6. Создайте сценарий script.sh, содержащий конвейер из двух команд. Первая команда должна отбирать две первые строки из файла ../genome/*_feature_table.txt, а вторая – вырезать из этих строк два первых столбца. Выполните полученный сценарий.

  7. Перейдите в родительскую папку (т.е. ~/term1) и выполните сценарий из неё. Для этого потребуется изменить команду запуска, указав правильный путь к сценарию. Почему вывелось сообщение об ошибке?

  8. Отредактируйте ~/term1/pr5 так, чтобы сценарий выполнялся верно из любой текущей папки. Для этого нужно отредактировать маску файла с таблицей локальных особенностей, чтобы под неё подходил абсолютный путь к файлу, а не относительный. Будет удобно использовать способность bash подменять тильду на абсолютный путь к домашней папке, хотя можно и без этого обойтись. Проверьте, что теперь сценарий выполяется правильно, когда текущей является домашняя папка, папка ~/term1 и папка ~/term1/pr5.

  9. Вернитесь в ~/term1/pr5 и отредактируйте сценарий так, чтобы он вообще не читал никакие файлы, а считывал данные со стандартного потока ввода. Для этого нужно убрать файловую маску из аргументов команды head. Если программе head не передать имя файла в аргументах, она начинает читать данные со стандартного потока ввода.

  10. Запустите сценарий, полученный в предыдущем пункте. После запуска курсор ввода должен переместиться в начало строки. Программа head запустилась и ждет ввода данных. Наберите следующие строки (<TAB> обозначает ввод символа табуляции с помощью нажатия на <Tab>).

    1<TAB>2<TAB>3
    4<TAB>5<TAB>6

    Если вы все сделали правильно, то должны напечататься "ячейки" с числами 1, 2, 4 и 5.

    Программа head в данном случае завершается после получения двух строк текста. Если вы вручную с клавиатуры вводите текст программе, которая не имеет собственных ограничений на объем входных данных, то используйте сочетание клавиш Ctrl+D, обозначающее конец ввода.

  11. Запустите сценарий script.sh еще раз, не изменяя его, в этот раз передав ему на стандартный вход файл ~/term1/genome/*_feature_table.txt. У вас должна получиться команда, использующая целых три специальных символа bash (не считая банальных пробелов и переноса строки) – ~, * и <.

2026/1/pr5_class (последним исправлял пользователь is_rusinov 2026-10-01 20:07:27)