Работа с файлами в си: открытие и закрытие, чтение и запись данных

Содержание

Программирование на С++

Программирование на С++

  

Основы программирования на языке С++: Учебное пособие/Сост. С. М. Наместников. – Ульяновск: УлГТУ, 2007.

Целью написания данного лекционного курса является компактное и ясное изложение основных принципов программирования на языке С++. При отборе материала предпочтение отдавалось тем конструкциям, которые наиболее часто используются на практике. Поэтому приведенное здесь изложение языка С++ не претендует на полноту описания, но по мнению автора позволит читателю усвоить достаточный минимум для написания несложных приложений.

Чтение курса «Информатика» придает автору уверенность, что данное пособие будет полезно студентам и аспирантам при изучении языка С++. Материал, приведенный здесь, может быть использован также преподавателями вузов при подготовке и проведении занятий по соответствующим дисциплинам.


Видео по теме

С++ с нуля: урок 1 — переменные, оператор присваивания

С++ с нуля: урок 2 — арифметические операции

С++ с нуля: урок 3 — директивы препроцессора

С++ с нуля, урок 4: условные операторы if и switch

С++ с нуля: урок 5 — операторы циклов while, for и do while

С++ с нуля: урок 6 — массивы, метод всплывающего пузырька

С++ с нуля: урок 7 — строки и функции работы с ними

С++ с нуля: урок 8 — функции: прототипы, перегрузка, рекурсия

С++ с нуля: урок 9 — области видимости переменных

С++ с нуля: урок 10 — битовые операции И, ИЛИ, НЕ, XOR

С++ с нуля: урок 11 — структуры

С++ с нуля: урок 12 — объединения, перечисления, typedef

С++ с нуля: урок 13 — указатели и ссылки, выделение памяти

С++ с нуля: урок 14 (часть 1) — функции работы с файлами

С++ с нуля: урок 14 (часть 2) — функции работы с файлами

С++ с нуля: урок 15 — стек, теория и практика

С++ с нуля: урок 16 — связные списки, теория и практика

С++ с нуля: урок 17 — бинарное дерево, теория и практика

С++ с нуля: урок 18 — указатели на функции

С++ с нуля: урок 19 — автоматические переменные и цикл типа for each


Оглавление

Введение
Глава 1. Введение в язык С++
1.1. Структура и этапы создания программы на языке С++
1.2. Стандарты языка С++
1.3. Представление данных в языке С++
1.4. Оператор присваивания
1.5. Системы счисления
1.6. Арифметические операции
1.7. Поразрядные операции языка С++
1.8. Директивы препроцессора
1.9. Функции ввода/вывода printf() и scanf()
Контрольные вопросы и задания
Глава 2. Базовые конструкции языка С++
2.1. Условные операторы if и switch
2.2. Операторы цикла языка С++
    2.2.1. Оператор цикла while
    2.2.2. Оператор цикла for
    2.2.3. Оператор цикла do while
    2.2.4. Программирование вложенных циклов
2.3. Функции
2.4. Область видимости переменных
Контрольные вопросы и задания
Глава 3. Расширенное представление данных
3.1. Массивы
3.2. Работа со строками
3.3. Обработка элементов массива
3.4. Структуры
3.5. Битовые поля
3.6. Объединения
3.7. Перечисляемые типы
3.8. Типы, определяемые пользователем
Контрольные вопросы и задания
Глава 4. Указатели и динамическое представление данных
4.1. Указатели
4.2. Функции malloc() и free(). Ссылки
4.3. Стек
4.4. Связные списки
4.5. Бинарные деревья
Контрольные вопросы и задания
Глава 5. Основы работы с файлами
5.1. Работа с текстовыми файлами
5.2. Работа с бинарными файлами
5.3. Пример программирования. Простой словарь
Контрольные вопросы и задания
Глава 6. Основы объектно-ориентированного программирования
6.1. Понятие классов в С++
6.2. Наследование
6.3. Дружественные классы и функции
6.4. Виртуальные функции
6.5. Перегрузка операторов
Контрольные вопросы и задания

Работа с файлами и каталогами — учебник по вычислительной биологии

Теперь, когда мы знаем, как находить файлы и каталоги в файловой системе, давайте изучим несколько важных инструментов для работы с ними и системой в целом.

Просмотр содержимого (текстового) файла

Хотя существует множество инструментов для просмотра и редактирования текстовых файлов, один из наиболее эффективных для их просмотра называется less , который принимает в качестве параметра путь к файлу для просмотра, который, конечно, может быть просто именем файла в текущий рабочий каталог (который является типом относительного пути). [1]

Вызов меньше в файле p450s.fasta открывает «интерактивное окно» в окне терминала, в котором мы можем прокручивать вверх и вниз (и влево и вправо) в файле с помощью клавиш со стрелками. (Как обычно, мышь не очень полезна в командной строке.) Мы также можем искать шаблон, набрав

/ , а затем введя шаблон перед нажатием Enter.

Когда закончите с минус , нажмите q завершит работу и вернет управление оболочке или командной строке. Многие текстовые форматы, используемые в вычислительной биологии, содержат длинные строки; по умолчанию минус будут оборачивать эти строки вокруг терминала, чтобы их можно было просмотреть целиком. Использование less -S отключит этот перенос строк, что позволит нам просматривать файл без переформатирования. Вот как выглядит файл выше при просмотре с меньше -S p450s.fasta :

Обратите внимание, что первая длинная строка не была перенесена, хотя мы все еще можем использовать клавиши со стрелками для прокрутки влево или вправо, чтобы увидеть оставшуюся часть этой строки.

Создание новых каталогов

Команда mkdir создает новый каталог (если файл или каталог с таким именем уже не существует) и принимает в качестве параметра путь к создаваемому каталогу. Обычно это простое имя файла как относительный путь внутри текущего рабочего каталога.

Переместить или переименовать файл или каталог

Утилита mv служит как для перемещения, так и для переименования файлов и каталогов. Самое простое использование работает как mv , где — это путь (абсолютный или относительный) к файлу/каталогу, который нужно переименовать, а — это новое имя или местоположение для его присвоения.

В этом примере мы переименуем p450s.fasta в p450s.fa , переместим его в папку Projects , а затем переименуем папку

Projects в Projects_dir .

Потому что mv выполняет двойную роль, важно помнить семантику:

  • Если <путь_назначения> не существует, он создается (при условии, что все содержащиеся в нем папки существуют).
  • Если <путь_назначения> существует:
    • Если <путь_назначения> является каталогом, источник перемещается внутрь этого местоположения.
    • Если <путь_назначения> является файлом, этот файл перезаписывается источником.

Другими словами, mv пытается угадать, что он должен делать, исходя из того, существует ли место назначения. Давайте быстро отменим ходы выше:

Еще несколько замечаний: Во-первых, при указании пути, который является каталогом, конечный

/ является необязательным: mv каталог_проектов/проекты совпадает с mv каталог_проектов проекты , если каталог_проектов является каталогом (аналогично, проектов можно было указать как проектов/). Во-вторых, можно переместить несколько файлов в один и тот же каталог, например, с mv p450s.fasta todo_list.txt проекты . В-третьих, довольно часто можно увидеть . ссылается на текущий рабочий каталог как на место назначения, например, mv ../file.txt. Например, , который переместит file.txt из каталога выше текущего рабочего каталога ( .. ) в текущий рабочий каталог ().0009 . или «здесь»).

Копировать файл или каталог

Копирование файлов и каталогов аналогично их перемещению, за исключением того, что оригинал не удаляется как часть операции. Команда для копирования —

cp , а синтаксис — cp <исходный_путь> <целевой_путь> . Однако есть одно предостережение: cp не скопирует весь каталог и все его содержимое, если вы не добавите в команду флаг -r , указывающий, что операция должна быть рекурсивной.

Упущение -r при попытке скопировать каталог приводит к предупреждению о пропуске каталога .

Можно одновременно копировать и перемещать (и удалять и т. д.) множество файлов, указав несколько источников. Например, вместо cp ../todo_list.txt. , мы могли бы скопировать и список дел, и файл p450s.fasta одной и той же командой:

Удалить (удалить) файл или каталог

Файлы могут быть удалены с помощью команды

rm , например rm <целевой_файл> . Если вы хотите удалить весь каталог и все, что внутри, вам нужно указать флаг -r для рекурсии, например, rm -r . В зависимости от конфигурации вашей системы вас могут спросить «Вы уверены?» для каждого файла, на который вы можете ответить y . Чтобы избежать этой проверки, вы также можете указать флаг -f (force), как в rm -r -f <целевой_каталог> или rm -rf <целевой_каталог> . Давайте создадим временный каталог вместе с копиями файлов сверху в папке проектов, а затем удалим файл p450s. fasta и файл todo_list.txt , а также временную папку.

Осторожно! Удаленные файлы исчезли навсегда. Нет отмены и корзины. Всякий раз, когда вы используете команду rm , дважды проверяйте свой синтаксис. Есть огромная разница между rm -rf project_copy (удаляет папку project_copy ) и rm -rf project _copy (удаляет папки project и _copy , если они существуют).

Проверка размера файла или каталога

Хотя ls -lh может показывать размеры файлов, эта команда не покажет, сколько места на диске занимает каталог и все его содержимое. Чтобы узнать эту информацию, есть du (использование диска), которая почти всегда сочетается с параметрами -s (суммировать) и -h (показать размеры в удобочитаемом формате).

Как всегда . — удобная цель, помогающая определить файловое пространство, используемое текущим рабочим каталогом.

Редактирование (текстового) файла

Нет недостатка в текстовых редакторах командной строки, и хотя некоторые из них, например vi, и emacs — мощны и могут повысить производительность в долгосрочной перспективе, они также требуют разумного времени для ознакомления с ними. (О каждом из этих редакторов написаны целые книги.)

Тем временем в большинстве систем доступен простой текстовый редактор nano ; для его запуска мы просто указываем имя файла для редактирования:

Если файл еще не существует, он будет создан при первом сохранении или «записан». Редактор nano открывает интерактивное окно, похожее на 9.0009 меньше , но содержимое файла можно изменить. Когда закончите, последовательность клавиш Control-o сохранит текущие изменения в указанный файл (вам нужно будет нажать Enter для подтверждения), а затем Control-x выйдет и вернет управление командной строке. Эта информация даже представлена ​​в небольшом справочном меню внизу.

Хотя nano не так совершенен, как vi или emacs , он поддерживает ряд функций, включая редактирование нескольких файлов, вырезание/копирование/вставку, поиск и замену по образцу и подсветку синтаксиса файлов кода.

Файлы кода

— это типы файлов, которые мы обычно хотим редактировать с помощью nano , а не эссе или коротких рассказов. По умолчанию в большинстве систем nano автоматически «переносит» длинные строки (т. е. автоматически нажимает Enter), если они превышают ширину экрана. К сожалению, эта функция вызовет ошибку для большинства строк кода! Чтобы отключить его, nano можно запустить с флагом -w , как в nano -w todo_list.txt .

Эффективность командной строки

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

Во-первых, подстановочные знаки, такие как * (что соответствует любому количеству произвольных символов) и ? (соответствует любому произвольному символу) позволяет нам ссылаться на группу файлов. Предположим, мы хотим переместить три файла, оканчивающихся на 9.0009 .temp в каталог temp . Мы могли бы запустить mv со списком файлов по отдельности:

В качестве альтернативы мы могли бы использовать mv file*.temp temp ; оболочка расширит file*.temp в список файлов, указанных выше до того, как передаст расширенный список в mv . [2]

Точно так же мы могли бы переместить только fileA.temp и fileB.temp (но не fileAA.temp ), используя mv file?.tmp temp , потому что ? Подстановочный знак будет соответствовать только одному любому символу. Эти подстановочные знаки могут использоваться в любом месте абсолютного или относительного пути, и в одном пути может использоваться более одного символа. Например, ls /home/*/*.txt проверит все файлы, оканчивающиеся на .txt , во всех домашних каталогах пользователей (если они доступны для чтения).

Во-вторых, если вы хотите повторно запустить команду или выполнить команду, аналогичную ранее выполненной команде, вы можете получить доступ к истории команд, нажав стрелку вверх. После того, как вы определили, какую команду вы хотите запустить или изменить, вы можете изменить ее с помощью стрелок влево и вправо, возврата или удаления, а затем снова ввести и нажать Enter, когда вы будете готовы выполнить измененную команду. (Вам даже не нужно держать курсор в конце строки, чтобы нажать Enter и выполнить команду.) Для данного сеанса входа в систему вы можете просмотреть часть истории команд, запустив история команда.

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

Получение справки по команде или программе

Хотя мы обсудили несколько параметров (также известных как аргументы или флаги) для таких программ, как ls , cp , nano и других, вы, возможно, захотите узнать о многих других. Большинство этих основных команд поставляются с «страницами руководства», сокращенно от «страниц руководства», к которым можно получить доступ с помощью команды man .

Эта команда открывает страницу справки для рассматриваемой команды (обычно в меньше или программа, подобная ей), показывающая различные параметры и флаги и то, что они делают, а также множество другой информации, такой как связанные команды и примеры. Для некоторых команд также есть «информационные» страницы; попробуйте запустить info ls , чтобы прочитать более полный обзор ls . В любом случае, как и в случае минус , нажатие q закроет страницу справки и вернет вас в командную строку.

Просмотр самых популярных программ

Утилита top бесценна для проверки того, какие программы потребляют ресурсы на машине; он показывает в интерактивном окне различные процессы (запущенные программы), отсортированные по проценту потребляемого ими процессорного времени, а также по тому, какой пользователь их запускает и сколько оперативной памяти они потребляют. Запуск top приводит к такому окну:

С точки зрения пользователей наиболее полезен список процессов под темной линией. В этом примере ни один из процессов в настоящее время не использует значительный объем ЦП или памяти (а запущенные процессы принадлежат администратору 9).0009 корень ). Но если бы какой-либо пользователь запускал процессы, требующие больше, чем крошечный бит ЦП, они, вероятно, были бы показаны. Вместо сортировки по использованию ОЗУ используйте последовательность клавиш Control-M . Когда закончите, q закроет top и вернет вас в командную строку.

Особое значение имеют столбцы %CPU и %MEM . Первый может варьироваться от 0 до 100 (процентов) , умноженное на количество ядер ЦП в системе ; таким образом, значение 3200 указывает на то, что программа использует 100 % 32 ядер ЦП (или, возможно, 50 % 64 ядер). Столбец %MEM находится в диапазоне от 0 до 100 (процентов). Как правило, это плохо для системы, когда общий объем памяти, используемой всеми процессами, близок или превышает 100% — это указывает на то, что системе не хватает «рабочей памяти» и она может пытаться использовать гораздо более медленный жесткий диск. как рабочая память. Эта ситуация известна как подкачка, и компьютер может работать настолько медленно, что фактически выйдет из строя.

Уничтожение мошеннических программ

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

Есть два способа остановить такие запущенные программы: «мягкий» и «жесткий». Мягкий способ заключается в попытке запустить комбинацию клавиш Control-c , который отправляет сигнал остановки запущенному процессу, чтобы он завершился.

Но если мошенническая программа находится в особенно серьезном состоянии ошибки, она не остановится даже с помощью Control-c , и необходимо «жесткое» уничтожение. Для этого требуется войти на тот же компьютер с другим окном терминала, чтобы восстановить некоторый доступ к командной строке. Запустите top и запишите PID (идентификатор процесса) процесса-нарушителя. Если вы не видите его в топ-9 0010, вы также можете попробовать запустить ps augx , который напечатает таблицу всех запущенных процессов. Предположим, что PID процесса, который нужно убить, равен 24516 ; убить этот процесс можно, запустив kill -9 24156 . Параметр -9 указывает, что операционная система должна остановить процесс на своем пути и немедленно очистить все используемые им ресурсы. Процессы, которые не останавливаются с помощью kill -9 , встречаются редко (хотя вы не можете убить процесс, запущенный другим пользователем), и, вероятно, потребуется либо перезагрузка компьютера, либо вмешательство администратора.

Упражнения

  1. Создайте следующие каталоги в своем домашнем каталоге, если у вас их еще нет: загрузок , локальных и проектов . Внутри local создайте каталог с именем bin . Эти папки являются общим и полезным набором в вашем домашнем каталоге — мы будем использовать их в будущих главах для работы, загрузки файлов и установки программного обеспечения.
  2. Откройте не одно, а два окна входа и войдите в каждый из них на удаленной машине. Это дает вам два текущих рабочих каталога, по одному в каждом окне. Вы можете использовать один для работы, а другой для создания заметок, редактирования файлов или просмотра результатов сверху .

    Создайте скрытый каталог внутри вашего домашнего каталога с именем .hidden . Внутри этого каталога создайте файл с именем notes . Отредактируйте файл, чтобы он содержал приемы и информацию, которые вы боитесь забыть. [3]

  3. Потратьте несколько минут на то, чтобы попрактиковаться в завершении табуляции при перемещении по файловой системе с использованием абсолютных и относительных путей. Эффективное передвижение с помощью табуляции — удивительно необходимый навык.
  4. Просмотрите страницу man , найдите ls и попробуйте несколько перечисленных там вариантов. Прочитайте немного страницы info для nano .

  1. Существует аналогичная программа под названием more , изначально предназначенная для отображения «большего» файла. Программа less была разработана как более полнофункциональная альтернатива more и была названа так потому, что «меньше значит больше». ↵
  2. Это важно учитывать при объединении rm с подстановочными знаками; команды rm -rf *.temp и rm -rf *.temp сильно отличаются! Последний удалит все файлы в текущем каталоге, а первый удалит только те, которые заканчиваются на .temp . ↵
  3. Вы также можете завести бумажный блокнот или что-то в Wiki или другом текстовом документе. Если вы предпочитаете вести цифровые заметки, попробуйте использовать простой текстовый редактор, например nano , TextEdit в OS X или Блокнот в Windows. Редакторы форматированного текста, такие как Microsoft Word, часто автоматически заменяют такие вещи, как простые кавычки кавычками с засечками, которые не работают в командной строке, что приводит к головной боли. ↵

Работа с файлами и каталогами – Введение в командную строку для геномики

Обзор

Обучение: 30 мин.
Упражнения: 15 мин

Вопросы

  • Как я могу просматривать и искать содержимое файла?

  • Как я могу создавать, копировать и удалять файлы и каталоги?

  • Как я могу контролировать, у кого есть разрешение на изменение файла?

  • Как повторить недавно использованные команды?

Цели

  • Просмотр, поиск, копирование, перемещение и переименование файлов. Создайте новые каталоги.

  • Используйте подстановочные знаки ( * ) для выполнения операций над несколькими файлами.

  • Сделать файл доступным только для чтения.

  • Используйте команду history для просмотра и повторения недавно использованных команд.

Работа с файлами

Наш набор данных: файлы FASTQ

Теперь, когда мы знаем, как перемещаться по нашей структуре каталогов, давайте начать работать с нашими файлами секвенирования. Мы провели эксперимент по секвенированию и есть два файла результатов, которые хранятся в нашем каталоге untrimed_fastq .

Подстановочные знаки

Перейдите в каталог untrimmed_fastq :

 $ cd ~/shell_data/untrimmed_fastq
 

Нас интересуют файлы FASTQ в этом каталоге. Мы можем перечислить все файлы с расширением .fastq с помощью команды:

 $ лс *. fastq
 
 SRR097977.fastq SRR098026.fastq
 

Символ * — это особый тип символов, называемый подстановочным знаком, который можно использовать для представления любого количества символов любого типа. Таким образом, *.fastq соответствует каждому файлу, оканчивающемуся на .fastq .

Эта команда:

 $ лс *977.fastq
 
 SRR097977.fastq
 

перечисляет только файлы, которые заканчиваются на 977.fastq .

Эта команда:

 $ лс /usr/bin/*.sh
 
 /usr/bin/amuFormat.sh /usr/bin/gettext.sh /usr/bin/gvmap.sh
 

Список всех файлов в /usr/bin , которые заканчиваются символами .sh . Обратите внимание, что вывод отображает полных путей к файлам, поскольку каждый результат начинается с /.

Упражнение

Выполните каждую из следующих задач из текущего каталога, используя один ls команда для каждого:

  1. Список всех файлов в /usr/bin , которые начинаются с буквы «c».
  2. Список всех файлов в /usr/bin , содержащих букву «а».
  3. Перечислите все файлы в /usr/bin , которые заканчиваются на букву «о».

Бонус: Список всех файлов в /usr/bin , которые содержат букву «а» или буква «с».

Подсказка: для бонусного вопроса требуется подстановочный знак Unix, о котором мы не говорили. еще. Попробуйте поискать в Интернете информацию о подстановочных знаках Unix, чтобы найти что вам нужно, чтобы решить проблему с бонусами.

Решение

  1. лс /usr/bin/c*
  2. лс /usr/bin/*a*
  3. лс /usr/bin/*o
    Бонус: лс /usr/bin/*[ac]*

Упражнение

echo — это встроенная команда оболочки, которая записывает свои аргументы в виде строки текста в стандартный вывод. Команду echo также можно использовать с символами сопоставления с образцом, такими как подстановочные знаки. Здесь мы воспользуемся командой echo , чтобы увидеть, как оболочка интерпретирует подстановочный знак.

 $ эхо *.fastq
 
 SRR097977.fastq SRR098026.fastq
 

* расширяется, чтобы включить любой файл, оканчивающийся на .fastq . Мы видим, что вывод echo *.fastq совпадает с ls *.fastq .

Как бы выглядел вывод, если бы подстановочный знак мог соответствовать , а не ? Сравните результаты эхо *.отсутствует и ls *.отсутствует .

Решение

 $ эхо *.отсутствует
 
 *.отсутствует
 
 $ лс *.отсутствует
 
 ls: невозможно получить доступ к '*.missing': нет такого файла или каталога
 

История команд

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

Еще несколько полезных сочетаний клавиш:

  • Ctrl + C отменит команду, которую вы пишете, и даст вам свежая подсказка.
  • Ctrl + R выполнит обратный поиск в вашей истории команд. Этот очень полезно.
  • Ctrl + L или команда clear очистит ваш экран.

Вы также можете просмотреть свои последние команды с помощью команды history , введя:

 $ история
 

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

Например, если ваша история выглядела так:

 259 лс *
260 лс /usr/bin/*.sh
261 лс *R1*fastq
 

, то вы можете повторить команду #260, введя:

 $ !260
 

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

Упражнение

Найдите номер строки в вашей истории для команды, в которой перечислены все .sh файлы в /usr/bin . Повторите эту команду.

Решение

Первый тип история . Тогда используйте ! , за которым следует номер строки для повторного запуска этой команды.

Изучение файлов

Теперь мы знаем, как переключаться между каталогами, запускать программы и просматривать содержимое каталогов, но как нам посмотреть содержимое файлов?

Один из способов проверить файл — распечатать все содержимое с помощью программы cat .

Введите следующую команду из каталога untrimmed_fastq :

$ кот SRR098026. fastq
 

Это выведет на экран все содержимое файла SRR098026.fastq .

Упражнение

  1. Распечатайте содержимое файла ~/shell_data/untrimmed_fastq/SRR097977.fastq . Какая последняя строка файла?
  2. Из вашего домашнего каталога и без изменения каталогов, используйте одну короткую команду для печати содержимого всех файлов в каталог ~/shell_data/untrimmed_fastq .

Решение

  1. Последняя строка файла: C:CCC::CCCCCCCC<8?6A:C28C<608'&&&,'$ .
  2. кошка ~/shell_data/untrimmed_fastq/*

cat — потрясающая программа, но когда файл действительно большой, она может быть раздражающим в использовании. Программа, меньше , пригодится для этого случай. меньше открывает файл только для чтения и позволяет перемещаться по нему. Команды навигации идентичны программе man .

Введите следующую команду:

 $ меньше SRR097977.fastq
 

Некоторые навигационные команды в меньше :

ключ действие
Космос идти вперед
б вернуться назад
г перейти к началу
Г идти до конца
q выйти

меньше также дает вам возможность поиска по файлам. Использовать Клавиша «/», чтобы начать поиск. Введите слово, которое вы хотите для поиска и нажмите введите . Экран перейдет к следующему месту, где это слово найдено.

Ярлык: Если вы нажмете «/», а затем «ввод», будет повторяться меньше предыдущий поиск. минус поисковых запросов из текущего местоположения и продвигается вперед. Прокрутите пару строк вверх на своем терминале, чтобы проверить вы находитесь в начале файла. Обратите внимание, если вы находитесь в конце файла и выполняете поиск для последовательности «САА» меньше не найдет. Вам либо нужно обратиться в начало файла (набрав г ) и повторите поиск, используя / или вы можно использовать ? для поиска назад так же, как вы использовали / ранее.

Например, давайте найдем в нашем файле последовательность TTTTT . Вы можете видеть, что мы идем прямо к этой последовательности, как она выглядит, и где он находится в файле. Если вы продолжите вводить / и нажмете Enter, вы переместитесь вперед к следующему экземпляру этого мотива последовательности. Если вы вместо этого наберете ? и нажмите return, вы будете выполнять поиск назад и перемещаться вверх по файлу к предыдущим примерам этого мотива.

Упражнение

Каковы следующие три нуклеотида (символа) после первого экземпляра приведенной выше последовательности?

Решение

САС

Помните, что программа man на самом деле использует минус внутри и поэтому использует одни и те же команды, поэтому вы можете искать документацию также используя «/»!

Есть еще один способ просмотра файлов, и в этом случае просто посмотрите на часть из них. Это может быть особенно полезно, если мы просто хотим чтобы увидеть начало или конец файла или посмотреть, как он отформатирован.

Команды head и tail позволяют посмотреть начало и конец файла соответственно.

$ головка SRR098026.fastq
 
 @SRR098026.1 HWUSI-EAS1599_1:2:1:0:968 длина=35
НННННННННННННННННННННННННННН
+СРР098026.1 HWUSI-EAS1599_1:2:1:0:968 длина=35
!!!!!!!!!!!!!!!!#!!!!!!!!!!!!!!!!!!!!
@SRR098026. 2 HWUSI-EAS1599_1:2:1:0:312 длина=35
ННННННННННННННННННННННННННН
+SRR098026.2 HWUSI-EAS1599_1:2:1:0:312 длина=35
!!!!!!!!!!!!!!!!#!!!!!!!!!!!!!!!!!!!!
@SRR098026.3 HWUSI-EAS1599_1:2:1:0:570 длина=35
ННННННННННННННННННННННННННН
 
$ хвост SRR098026.fastq
 
 +SRR098026.247 HWUSI-EAS1599_1:2:1:2:1311 длина=35
#!##!##################!!!!!!!!######
@SRR098026.248 HWUSI-EAS1599_1:2:1:2:118 длина=35
GNTGNGGTCATCATACGCGCCCNNNNNNNGGCATG
+SRR098026.248 HWUSI-EAS1599_1:2:1:2:118 длина=35
Б!;?!А=5922:##########!!!!!!!######
@SRR098026.249 HWUSI-EAS1599_1:2:1:2:1057 длина=35
CNCTNTATGCGTACGGCAGTGANNNNNNGGAGAT
+SRR098026.249 HWUSI-EAS1599_1:2:1:2:1057 длина=35
A!@B!BBB@ABAB#########!!!!!!!######
 

Опция -n любой из этих команд может быть использована для печати первые или последние n строк файла.

$ головка-n 1 SRR098026.fastq
 
 @SRR098026.1 HWUSI-EAS1599_1:2:1:0:968 длина=35
 
 $ хвост -n 1 SRR098026.fastq
 
 A!@B!BBB@ABAB#########!!!!!!!######
 

Подробная информация о формате FASTQ

Несмотря на то, что это выглядит сложно (и так оно и есть), его легко понять. формат fastq с небольшим декодированием. Некоторые правила оформления включить…

Линия Описание
1 Всегда начинается с «@», а затем информация о прочитанном
2 Фактическая последовательность ДНК
3 Всегда начинается с «+», а иногда такая же информация в строке 1
4 Содержит строку символов, представляющую показатели качества; должно иметь то же количество символов, что и строка 2

Мы можем просмотреть первое полное чтение в одном из файлов в нашем наборе данных, используя head для просмотра первые четыре строки.

$ головка-n 4 SRR098026.fastq
 
 @SRR098026.1 HWUSI-EAS1599_1:2:1:0:968 длина=35
НННННННННННННННННННННННННННН
+SRR098026.1 HWUSI-EAS1599_1:2:1:0:968 длина=35
!!!!!!!!!!!!!!!!#!!!!!!!!!!!!!!!!!!!!
 

Все нуклеотиды в этом прочтении, кроме одного, неизвестны ( N ). Это довольно плохое чтение!

Строка 4 показывает качество каждого нуклеотида в прочтении. Качество интерпретируется как вероятность неправильного базового вызова (например, 1 из 10) или, что то же самое, базового вызова точность (например, 90%). Чтобы можно было поставить в соответствие каждому отдельному нуклеотиду его качество оценка, числовая оценка преобразуется в код, в котором каждый отдельный символ представляет числовой показатель качества для отдельного нуклеотида. Например, в строке выше строка оценки качества:

 !!!!!!!!!!!!!!!!#!!!!!!!!!!!!!!!!!!!!
 

Символ # и каждый из ! символов представляют качество кодирования для отдельный нуклеотид. Числовое значение, присвоенное каждому из этих символов, зависит от платформу секвенирования, сгенерировавшую считывания. Секвенатор, используемый для генерации наших данных использует стандартное кодирование результатов PHRED качества Sanger, начиная с версии Illumina 1.8. Каждому персонажу присваивается показатель качества от 0 до 42, как показано в таблице ниже.

 Кодирование качества: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJK
                  | | | | |
Показатель качества: 0........10........20........30........40..
 

Каждый показатель качества представляет собой вероятность того, что соответствующий вызов нуклеотида неправильно. Этот показатель качества логарифмически основан, поэтому показатель качества 10 отражает базовая точность вызова 90%, но показатель качества 20 отражает базовую точность вызова 99%. Эти значения вероятности являются результатами базового алгоритма вызова и зависят от того, как много сигнала было захвачено для включения базы.

Оглядываясь назад на наше чтение:

 @SRR098026.1 HWUSI-EAS1599_1:2:1:0:968 длина=35
НННННННННННННННННННННННННННН
+SRR098026.1 HWUSI-EAS1599_1:2:1:0:968 длина=35
!!!!!!!!!!!!!!!!#!!!!!!!!!!!!!!!!!!!!
 

теперь мы можем видеть, что качество каждого из N равно 0, а качество единственного вызов нуклеотида ( C ) тоже очень плохое ( # = показатель качества 2). Это действительно очень плохо читается.

Создание, перемещение, копирование и удаление

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

Копирование файлов

При работе с вычислительными данными важно сохранить безопасную копию этих данных, которую нельзя будет случайно перезаписать или удалить. Для этого урока наши необработанные данные — это файлы FASTQ. Мы не хотим случайно изменить исходные файлы, поэтому сделаем их копию и измените права доступа к файлам, чтобы мы могли читать, но не записывать файлы.

Во-первых, давайте сделаем копию одного из наших файлов FASTQ, используя команду cp .

Перейдите в каталог shell_data/untrimmed_fastq и введите:

 $ cp SRR098026.fastq SRR098026-copy.fastq
$ лс -F
 
 SRR097977.fastq SRR098026-copy.fastq SRR098026.fastq
 

Теперь у нас есть две копии файла SRR098026.fastq , одна из них называется SRR098026-copy.fastq . Мы переместим этот файл в новый каталог называется backup , где мы будем хранить файлы резервных копий.

Создание каталогов

Команда mkdir используется для создания каталога. Введите мкдир затем пробел, затем имя каталога, который вы хотите создать:

 $ резервная копия mkdir
 

Перемещение/переименование

Теперь мы можем переместить файл резервной копии в этот каталог. Мы можем перемещать файлы с помощью команды mv :

 $ mv SRR098026-copy. fastq резервная копия
резервная копия $ ls
 
 SRR098026-copy.fastq
 

Команда mv также используется для переименования файлов. Давайте переименуем этот файл, чтобы было понятно, что это резервная копия:

$ резервная копия компакт-диска
$ mv SRR098026-copy.fastq SRR098026-backup.fastq
$ лс
 
 SRR098026-backup.fastq
 

Разрешения на доступ к файлам

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

Просмотр текущих разрешений для файла с использованием флага -l (длинный) для команды ls :

 $ лс-л
 
 -rw-r--r-- 1 dcuser dcuser 43332 15 ноября 23:02 SRR098026-backup. fastq
 

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

Здесь три позиции, относящиеся к владельцу файла: rw-. r означает, что у вас есть разрешение на чтение файла, w указывает, что у вас есть разрешение на запись (т. е. внесение изменений) в файл, а третья позиция — , что указывает у вас нет разрешения на выполнение способности, закодированной в этом пространстве (это пространство, где хранится x или исполняемая способность, мы будем подробнее об этом в следующем уроке).

На данный момент наша цель — изменить права доступа к этому файлу, чтобы у вас больше не было w или прав на запись. Мы можем сделать это, используя команду chmod (change mode) и вычитая ( - ) разрешение на запись -w .

 $ chmod -w SRR098026-backup.fastq
$ лс -л
 
 -r--r--r-- 1 dcuser dcuser 43332 15 ноября 23:02 SRR098026-backup.fastq
 

Удаление

Чтобы доказать себе, что у вас больше нет возможности изменять этот файл, попробуйте удалить его с помощью rm команда:

 $ rm SRR098026-backup.fastq
 

Вас спросят, хотите ли вы переопределить права доступа к файлам:

 rm: удалить защищенный от записи обычный файл «SRR098026-backup.fastq»?
 

Вы должны ввести n для номера. Если вы введете n (нет), файл не будет удален. Если вы введете y , вы удалите файл. Это дает нам дополнительную меры безопасности, так как между нами и удалением наших файлов данных есть еще один шаг.

Важно : Команда rm безвозвратно удаляет файл. Будьте осторожны с этой командой. Это не просто аккуратно поместите файлы в корзину. Они действительно ушли.

По умолчанию rm не удаляет каталоги. Вы можете сказать rm удалить каталог, используя параметр -r (рекурсивный). Давайте удалим каталог резервного копирования мы только что сделали.

Введите следующую команду:

$ кд ..
$ rm -r резервная копия
 

Это приведет к удалению не только каталога, но и всех файлов внутри каталога. Если в каталоге есть файлы, защищенные от записи, вас спросят, хотите ли вы переопределить настройки разрешений.

Упражнение

Начиная с каталога shell_data/untrimmed_fastq/, выполните следующие действия:

  1. Убедитесь, что вы удалили каталог резервных копий и все содержащиеся в нем файлы.
  2. Создайте резервную копию каждого из ваших файлов FASTQ, используя сп . (Примечание: вам нужно будет сделать это отдельно для каждого из двух файлов FASTQ. Мы не научился еще как это делать с подстановочным знаком.)
  3. Используйте подстановочный знак, чтобы переместить все файлы резервных копий в новый каталог резервных копий.
  4. Измените права доступа ко всем файлам резервных копий, чтобы они были защищены от записи.

Решение

  1. rm -r резервная копия
  2. cp SRR098026.fastq SRR098026-backup.fastq и cp SRR097977.fastq SRR097977-backup.fastq
  3. mkdir backup и mv *-backup.fastq backup
  4. chmod -w backup/*-backup.fastq
    Всегда полезно проверить свою работу с помощью ls -l backup . Вы должны увидеть что-то вроде:
 -r--r--r-- 1 dcuser dcuser 47552 15 ноября 23:06 SRR097977-backup.fastq
-r--r--r-- 1 dcuser dcuser 43332 15 ноября 23:06 SRR098026-backup.
Оставить комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *