UNIX シェルでファイル検査を実行する

完了

データをある形式から別の形式に取り込みたいと思ったことはありますか? これまでにあったかもしれませんし、これからもそうでしょう。 このプロセスは データ ラングリング と呼ばれ、開発者が直面する一般的なタスクです。 データのラングリング方法を学習する前に、操作するいくつかのデータ ファイルが必要です。

多くの場合、開発者は、ログから情報を抽出する必要があります。 このモジュールでは、NASA のログとコマンド ラインを使用します。 開始するには、データセットをサンドボックス環境にダウンロードする必要があります。

サンドボックスのアクティブ化

サインインしてサンドボックスをアクティブにするプロセスの実行は、学習モジュールの範囲外です。 サインインすると、自動的にモジュールに戻ります。

サンドボックスがアクティブである時間は限られています。 このモジュールを複数のセッションで完了する予定であれば、作業が失われないように、Azure portal で Cloud Shell を使ってステップをテストすることを検討してください。

Azure Cloud Shell でコマンドを操作する

Cloud Shell で演習コマンドを操作するには、次の手順に従います。

  1. コード ブロックの右上にある [コピー ] を選択して、コマンドをコピーします。
  2. Cloud Shell プロンプトで右クリックして [ >Paste] を選択し、コピーしたコマンドを使用します。
  3. Enter キーを押してコマンドを実行します。

NASA データセットの取得

このモジュールの演習を完了するには、NASA データセットを読み込む必要があります。

  1. mkdir コマンドを使用して、data という名前の新しいディレクトリを作成します。

    mkdir data
    
  2. wget コマンドを使って、ログ データセットを data ディレクトリにダウンロードします。

    wget -P data/ https://raw.githubusercontent.com/MicrosoftDocs/mslearn-data-wrangling-shell/main/NASA-logs-1995.txt
    
  3. もう一度 wget コマンドを使って、ソフトウェア API データセットを data ディレクトリにダウンロードします。

    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 の 2 つのファイルが表示されます

最初のファイル NASA-software-API.txt は、NASA で使われているすべてのソフトウェアを一覧表示するオープン データセットです。 元のデータセットの詳細については、「 NASA オープン ソース」および「General Resource Software API」を参照してください。 2 番目のデータセットには、NASA ケネディ宇宙センターのサーバーにログされたすべての要求が含まれています。

ファイルの内容をクイック表示する

UNIX の場合、既定では、ターミナルに 3 つのストリーム (1 つの入力ストリームと 2 つの出力ベースのストリーム) が含まれることを思い出してください。 入力ストリームは、標準入力を表す stdin として参照され、キーボードにマップされます。 標準出力ストリーム (stdout) は、通常、ターミナルに出力されるか、別のプログラムまたはプロセスで使用されることがあります。 もう一方の出力ストリーム (stderr) は、主に状態レポートに使用され、通常、stdout などのターミナルに出力されます。

そのリフレッシャーがなぜ必要なのか疑問に思われるかもしれません。 次のユニットでは、プログラムとフィルター、および標準入力と出力について説明します。 これらの項目がどのように関連しているかについての基本的な理解が必要です。 モジュールで先に進むに従って、この情報はすべてより意味のあるものになります。

データのラングリングに進む前に、基本的なファイル検査を行うと便利です。 生データの内容を把握する必要があります。

head コマンドと tail コマンド

ファイルの上部 (先頭) または下部 (末尾) を調べるには、head および tail コマンドを使用します。 どちらのコマンドを使用した場合も、既定では、10 行の内容が表示されます。 これよりも多いまたは少ない行を表示する場合は、オプション フラグ -n を使って、stdout に出力する行数を指定します。

NASA-software-API.txt ファイルの最後および最初の 5 行を表示するには、それぞれ tail および head コマンドを使用します。

  1. ファイルの最後の 5 行を表示するには、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. ファイルの最初の 5 行を表示するには、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. NASA-software-API.txt ファイル内の行数、単語数、文字数を確認するには wc コマンドを入力します。

    wc NASA-software-API.txt
    

    出力は次のようになります。

      703   8917   81115   NASA-software-API.txt
    

    出力から、このファイルに含まれているのは、行数 703、単語数 8,917、文字数 81,115 であることがわかります。 前のコマンド nl の出力を再び確認してみましょう。 最後に出力された行は次のようになります。

    700=GSC-14726-1 GSFC 2004-06-09T00:00:00.000 "Open Source" "Earth Observing System (EOS) Clearinghouse (ECHO)"

    この行のインデックスは 703 ではなく、700 (700=GSC...) であることに注意してください。 どうしてこうなるのでしょうか?

    既定では、コマンド nl で空白行に番号が付けられないため、このインデックス値が 700 になります。

  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 と一致しました。