Выполнение проверки файлов в оболочке UNIX
Вам когда-нибудь приходилось переводить данные из одного формата в другой? Скорее всего, да, или вы еще столкнетесь с этим в будущем. Этот процесс называется первичной обработкой данных и является распространенной задачей разработчиков. Чтобы научиться выполнять первичную обработку данных, нам нужны файлы данных для работы.
Разработчикам часто приходится извлекать данные из журналов. В этом модуле мы будем использовать журналы НАСА и командную строку. Чтобы приступить к работе, необходимо загрузить наборы данных в среду песочницы.
Активация песочницы
Процесс входа в систему для активации песочницы выполняется за пределами этого модуля. Выполнив вход, вы автоматически вернетесь к модулю.
Песочница активна в течение ограниченного периода времени. Если вы планируете выполнить этот модуль в несколько приемов, возможно, следует использовать Cloud Shell на портале Azure для проверки на каждом этапе, чтобы не потерять свою работу.
Работа с командами в Azure Cloud Shell
Для работы с командами упражнений в Cloud Shell выполните следующие действия:
- Скопируйте команду, выбрав Копировать в правом верхнем углу блока кода.
- Вставьте скопированную команду в командную строку Cloud Shell, выбрав в контекстном меню пункт >Вставить.
- Выполните команду, нажав клавишу ВВОД.
Получение наборов данных НАСА
Для выполнения упражнений в этом модуле необходимо загрузить наборы данных НАСА.
С помощью команды
mkdir
создайте новый каталог с именем data.mkdir data
С помощью команды
wget
скачайте набор данных журнала в каталог данных:wget -P data/ https://raw.githubusercontent.com/MicrosoftDocs/mslearn-data-wrangling-shell/main/NASA-logs-1995.txt
Используйте команду
wget
еще раз, чтобы скачать набор данных software-API в каталог данных:wget -P data/ https://raw.githubusercontent.com/MicrosoftDocs/mslearn-data-wrangling-shell/main/NASA-software-API.txt
Ниже показан пример результатов выполнения команды
wget
:--2022-06-09 06:19:13-- https://raw.githubusercontent.com/MicrosoftDocs/mslearn-data-wrangling-shell/main/NASA-software-API.txt Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.108.133, 185.199.109.133, 185.199.110.133, ... Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.108.133|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 81115 (79K) [text/plain] Saving to: ‘data/NASA-software-API.txt’ NASA-software-API.txt 100%[==========================================================>] 79.21K --.-KB/s in 0.001s 2022-06-09 06:19:13 (69.6 MB/s) - ‘data/NASA-software-API.txt’ saved [81115/81115]
Перейдите в новый каталог с помощью команды
cd
:cd data
Убедитесь, что у вас есть нужные файлы, с помощью команды
ls
:ls
Должны отобразиться два файла: NASA-software-API.txt и NASA-logs-1995.txt.
Первый файл, NASA-software-API.txt, представляет собой открытый набор данных, в котором перечислено все программное обеспечение, используемое в НАСА. Дополнительные сведения об исходном наборе данных см. в разделе API программного обеспечения НАСА с открытым кодом и общие ресурсы. Второй набор данных содержит все зарегистрированные запросы к серверу Космического центра Кеннеди.
Просмотр содержимого файлов
Вспомним, что в UNIX по умолчанию терминал имеет три потока: входной поток и два потока вывода. Входной поток называется stdin
для стандартного ввода и сопоставляется с клавиатурой. Стандартный поток вывода, или stdout
, обычно выводится на экран терминала или может использоваться другой программой или процессом. Другой поток вывода, stderr
, в основном используется для отчетов о состоянии и обычно выводится в терминале, например stdout
.
Зачем мы вспомнили об этом? В следующих уроках мы будем говорить о программах и фильтрах, а также о стандартных входных и выходных потоках. Вам лучше знать о том, как связаны эти элементы. Вы все поймете по мере изучения модуля.
Прежде чем перейти к первичной обработке данных, нужно выполнить базовую проверку файлов. Так мы получим представление о том, как выглядят необработанные данные.
Команды head и tail
Команды head
и tail
используются для просмотра верхней (головной) или нижней (заключительной) части файла. По умолчанию обе команды отображают 10 строк содержимого. Если нужно отобразить больше или меньше строк, можно использовать флаг -n
, чтобы указать число строк, выводимых в stdout
.
Мы будем использовать команды tail
и head
для вывода последних и первых пяти строк файла NASA-software-API.txt соответственно.
Введите команду
tail
с флагом-n
, чтобы отобразить последние пять строк в файле:tail -n 5 NASA-software-API.txt
Выходные данные должны выглядеть следующим образом.
SSC-00393 SSC 2013-05-17T00:00:00.000 "General Public" "Software Suite to Support In-Flight Characterization of Remote Sensing Systems" SSC-00424 SSC 2013-09-06T00:00:00.000 "General Public" "SSC Site Status Mobile Application" GSC-14732-1 GSFC 2004-06-09T00:00:00.000 "Open Source" "Tool For Interactive Plotting, Sonification, And 3D Orbit Display (TIPSOD)" GSC-14730-1 GSFC 2004-06-09T00:00:00.000 "Open Source" "Space Physics Data Facility Web Services" GSC-14726-1 GSFC 2004-06-09T00:00:00.000 "Open Source" "Earth Observing System (EOS) Clearinghouse (ECHO)"
Введите команду
head
с флагом-n
, чтобы отобразить первые пять строк в файле:head -n 5 NASA-software-API.txt
Выходные данные должны выглядеть следующим образом.
ARC-14136-1 ARC 2001-10-19T00:00:00.000 "Academic Worldwide" "Adaptive Relevance-Learning Software Component (ARNIE)" ARC-14293-1 ARC 2005-09-19T00:00:00.000 "Open Source" "Genetic Graphs (JavaGenes)" ARC-14297-1 ARC 2003-11-06T00:00:00.000 "General US" "Automated Domain Decomposition Software, PEGASUS Version 5.0" ARC-14379-1 ARC 2002-03-27T00:00:00.000 "General US" "Man-machine Integration Design And Analysis System (MIDAS)" ARC-14400-1 ARC 2001-01-29T00:00:00.000 "General US" "PLOT3D Version 4.0"
Фильтр nl
Фильтр nl
считывает строки из файлов или из stdin
. Выходные данные выводятся в stdout
. По умолчанию фильтр nl
подсчитывает строки в файле и использует символы табуляции для отделения номера строки от текста.
Введите фильтр
nl
с флагом-s
, чтобы использовать знак равенства (=
) в качестве разделителя:nl -s = NASA-software-API.txt
Выходные данные должны содержать каждую строку в файле и заканчиваться следующими строками:
... 697=SSC-00424 SSC 2013-09-06T00:00:00.000 "General Public" "SSC Site Status Mobile Application" 698=GSC-14732-1 GSFC 2004-06-09T00:00:00.000 "Open Source" "Tool For Interactive Plotting, Sonification, And 3D Orbit Display (TIPSOD)" 699=GSC-14730-1 GSFC 2004-06-09T00:00:00.000 "Open Source" "Space Physics Data Facility Web Services" 700=GSC-14726-1 GSFC 2004-06-09T00:00:00.000 "Open Source" "Earth Observing System (EOS) Clearinghouse (ECHO)"
Фильтр nl
содержит флаги, позволяющие изменить значение приращения (-i
), формат нумерации (ln, rn, rz
) или начальный номер (-v
).
Команда wc
Команда подсчета слов wc
подсчитывает количество строк, слов (разделенных пробелами) и символов в файле или из stdin
. Выходные данные выводятся в stdout
и разделяются символами табуляции.
Используйте команду
wc
для просмотра числа строк, слов и символов в файле NASA-software-API.txt:wc NASA-software-API.txt
Выходные данные должны выглядеть следующим образом.
703 8917 81115 NASA-software-API.txt
В выходных данных можно увидеть, что файл содержит 703 строки, 8917 слов и 81 115 символов. Повторно проверьте выходные данные предыдущей команды (
nl
). Мы видим, что последняя выведенная строка:700=GSC-14726-1 GSFC 2004-06-09T00:00:00.000 "Open Source" "Earth Observing System (EOS) Clearinghouse (ECHO)"
Обратите внимание, что индекс этой строки равен 700, а не 703 (
700=GSC...
). Почему?Значение индекса 700 объясняется тем, что по умолчанию команда
nl
не считает пустые строки.Попробуйте выполнить команду
nl
повторно, на этот раз с флагом параметра-b a
, чтобы подсчитать все строки, включая пустые:nl -b a NASA-software-API.txt
Последняя строка выходных данных должна быть следующей.
... 703 GSC-14726-1 GSFC 2004-06-09T00:00:00.000 "Open Source" "Earth Observing System (EOS) Clearinghouse (ECHO)"
Теперь значение индекса соответствует количеству строк, подсчитанных с помощью команды
wc
, — 703.