Работа в классе
Выполнение этих упражнений не проверяется и не оценивается, они призваны помочь в освоении материала. Настоятельно рекомендуем доделать дома все упражнения, которые не успели выполнить в классе.
Манипуляции с текстом
Многие упражнения можно выполнить лишь после чтения справки по указанным командам. Часто будет нужна не команда в чистом виде, а модифицированная какой-нибудь опцией (а иногда и несколькими).
Создайте папку ~/term1/pr5, дальше все делайте в этой папке. Переходить в неё или нет решайте сами, это влияет только на указание путей к файлам. Все пути ниже указаны в абсолютном виде или относительно ~/term1/pr5.
(less) Используйте файл ~/term1/genome/*_feature_table.txt (далее FT), который вы получили при выполнении практикума 2, для изучения опций -S, -N и -U программы less. На примере этого файла разберитесь, как устроены текстовые таблицы в формате TSV.
(cut) Вырежьте первую колонку файла FT. Перенаправьте выдачу в файл col_1.txt. Проверьте содержимое файла.
(cut) Вырежьте две первые колонки из FT и сохраните их в cols.tsv.
(wc) Определите число строк в файле FT? Убедитесь, что количество строк в файлах col_1.txt и cols.tsv не отличается.
(sort) Определите, какие уникальные пары значений встречаются в колонках из cols.tsv (выведите их в терминал).
(sort, uniq) Посчитайте (выведите в терминал) количество повторений для каждой строки из файла col_1.txt. Сколько в исходном файле было строчек CDS? А сколько rRNA?
(head) Выведите 5 первых строк (включая строку заголовков столбцов) из файла FT. Сначала просто напечатайте в терминал, потом перенаправьте в less для интерактивного просмотра. Наверно, будет удобно применить опцию less, позволяющую не переносить длинные строки.
(tail) Выведите все строки FT, кроме первой (иногда нужно удалить строку-заголовок). С помощью перенаправления в wc убедитесь, что строк действительно стало ровно на одну меньше. Посмотрите эти строки в less без предварительной записи в какой-либо файл.
(tr) Выведите в терминал содержимое файла cols.tsv, заменив все символы табуляции на доллары. Ввести табулятор в виде символа в командную строку bash затруднительно, ведь он используется для автодополнения. К счастью, tr понимает обозначения некоторых особых символов, в том числе табулятора. А еще tr не умеет читать файлы, эта программа получает данные только со стандартного потока ввода. Прочитайте справку по tr!
(head, tr) Выведите (в терминал или в less) заголовки столбцов из FT, по одному в строке. Для этого символы табуляции нужно будет заменить на переносы строк. Если передать выдачу на вход программе nl (от number lines), то можно еще и номера столбцов сразу узнать.
(cut, tr) Создайте файл coords.tsv, который будет содержать табличку из трех колонок: start, end и strand, которые будут идентичны соответствующим колонкам файла FT за исключением того, что в колонке strand будут не + и -, а 1 и 0 (для прямой и обратной цепи соответственно).
(sort, uniq, sort) Вывести количества встреч каждой уникальной пары значений из колонок файла cols.tsv, отсортированные по убыванию.
Grep
Выведите все строчки файла /P/y26/term1/pr5.txt, которые содержат последовательность символов "qwerty" (без кавычек).
Выведите все строчки файла /P/y26/term1/pr5.txt, которые содержат qwerty в любом регистре букв. Посмотрите эти строки в less.
Выведите все строчки файла /P/y26/term1/pr5.txt, которые заканчиваются на qwerty в любом регистре.
(grep) Выведите все строчки файла /P/y26/term1/pr5.txt, которые начинаются на qwerty в любом регистре. Сколько таких строк? Как можно посчитать нужные строки с помощью только grep без wc?
Сколько строк файла /P/y26/term1/pr5.txt полностью равны qwerty (c учетом регистра)? Правильный ответ – две (четыре, если игнорировать регистр).
Из файла со скаченным геномом бактерии в формате fasta (он у вас в ~/term1/genome) выведите только строки заголовков (они начинаются на >). Сколько в файле последовательностей "репликонов" (т.е. отдельных молекул ДНК: хромосом или плазмид)?
Выведите все строчки файла /P/y26/term1/pr5.txt, которые содержат 10$ (десять долларов без пробела).
Выведите все строчки файла /P/y26/term1/pr5.txt, которые содержат ^qwerty (именно со знаком крышечки).
Выведите все строчки файла /P/y26/term1/pr5.txt, которые заканчиваются на qwerty$ (да, с символом доллара на конце строки).
Выведите все строчки файла /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:~$
Есть возможность запуска сценариев напрямую, т.е. без указания интерпретатора. Но этот способ требует дополнительных знаний и умений и выходит за рамки курса.
Перейдите в папку ~/term1/pr5.
С помощью nano создайте файл script.sh (bash-сценариям принято давать расширение .sh или .bash), который будет содержать команду echo 'Выполняется команда из сценария.'
Выполните сценарий script.sh с помощью запуска bash в неинтерактивном режиме.
Выполните сценарий еще раз, не изменяя его, записав выдачу в файл script.out. Нужно использовать перенаправление потока вывода в момент запуска сценария.
Отредактируйте script.sh, дописав в него команду echo '... и еще одна команда из сценария.' с новой строки. Сохраните сценарий и выполните его.
Создайте сценарий script.sh, содержащий конвейер из двух команд. Первая команда должна отбирать две первые строки из файла ../genome/*_feature_table.txt, а вторая – вырезать из этих строк два первых столбца. Выполните полученный сценарий.
Перейдите в родительскую папку (т.е. ~/term1) и выполните сценарий из неё. Для этого потребуется изменить команду запуска, указав правильный путь к сценарию. Почему вывелось сообщение об ошибке?
Отредактируйте ~/term1/pr5 так, чтобы сценарий выполнялся верно из любой текущей папки. Для этого нужно отредактировать маску файла с таблицей локальных особенностей, чтобы под неё подходил абсолютный путь к файлу, а не относительный. Будет удобно использовать способность bash подменять тильду на абсолютный путь к домашней папке, хотя можно и без этого обойтись. Проверьте, что теперь сценарий выполяется правильно, когда текущей является домашняя папка, папка ~/term1 и папка ~/term1/pr5.
Вернитесь в ~/term1/pr5 и отредактируйте сценарий так, чтобы он вообще не читал никакие файлы, а считывал данные со стандартного потока ввода. Для этого нужно убрать файловую маску из аргументов команды head. Если программе head не передать имя файла в аргументах, она начинает читать данные со стандартного потока ввода.
Запустите сценарий, полученный в предыдущем пункте. После запуска курсор ввода должен переместиться в начало строки. Программа head запустилась и ждет ввода данных. Наберите следующие строки (<TAB> обозначает ввод символа табуляции с помощью нажатия на <Tab>).
1<TAB>2<TAB>3 4<TAB>5<TAB>6
Если вы все сделали правильно, то должны напечататься "ячейки" с числами 1, 2, 4 и 5.
Программа head в данном случае завершается после получения двух строк текста. Если вы вручную с клавиатуры вводите текст программе, которая не имеет собственных ограничений на объем входных данных, то используйте сочетание клавиш Ctrl+D, обозначающее конец ввода.
Запустите сценарий script.sh еще раз, не изменяя его, в этот раз передав ему на стандартный вход файл ~/term1/genome/*_feature_table.txt. У вас должна получиться команда, использующая целых три специальных символа bash (не считая банальных пробелов и переноса строки) – ~, * и <.

2025
2024
2023
2022
2021
2020
2019
2018