Выполнение проверки файлов в оболочке UNIX

Завершено

Вам когда-нибудь приходилось переводить данные из одного формата в другой? Скорее всего, да, или вы еще столкнетесь с этим в будущем. Этот процесс называется первичной обработкой данных и является распространенной задачей разработчиков. Чтобы научиться выполнять первичную обработку данных, нам нужны файлы данных для работы.

Разработчикам часто приходится извлекать данные из журналов. В этом модуле мы будем использовать журналы НАСА и командную строку. Чтобы приступить к работе, необходимо загрузить наборы данных в среду песочницы.

Активация песочницы

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

Песочница активна в течение ограниченного периода времени. Если вы планируете выполнить этот модуль в несколько приемов, возможно, следует использовать Cloud Shell на портале Azure для проверки на каждом этапе, чтобы не потерять свою работу.

Работа с командами в Azure Cloud Shell

Для работы с командами упражнений в Cloud Shell выполните следующие действия:

  1. Скопируйте команду, выбрав Копировать в правом верхнем углу блока кода.
  2. Вставьте скопированную команду в командную строку Cloud Shell, выбрав в контекстном меню пункт >Вставить.
  3. Выполните команду, нажав клавишу ВВОД.

Получение наборов данных НАСА

Для выполнения упражнений в этом модуле необходимо загрузить наборы данных НАСА.

  1. С помощью команды mkdir создайте новый каталог с именем data.

    mkdir data
    
  2. С помощью команды wget скачайте набор данных журнала в каталог данных:

    wget -P data/ https://raw.githubusercontent.com/MicrosoftDocs/mslearn-data-wrangling-shell/main/NASA-logs-1995.txt
    
  3. Используйте команду 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]
    
  4. Перейдите в новый каталог с помощью команды cd:

    cd data
    
  5. Убедитесь, что у вас есть нужные файлы, с помощью команды 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 соответственно.

  1. Введите команду 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)"
    
  2. Введите команду 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 и разделяются символами табуляции.

  1. Используйте команду 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 не считает пустые строки.

  2. Попробуйте выполнить команду 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.