ITエンジニアとして経験・学習したこと

ITエンジニアとして経験したり学習したことを忘れないよう、書いていきたいと思います。少しでも皆様のお役に立てれば幸いです。

GCS(Google Cloud Storage)上の複数ファイルを一括で取得し行数を数えてみた(Windows版)

今回は、Windows端末の仮想マシン上で、GCP(Google Cloud Platform)内のGCS(Google Cloud Storage)上のファイルを一括で取得し、各ファイルの行数を数えCSVファイルに出力してみたので、その方法について共有する。

 

前提条件

GCP(Google Cloud Platform)のアカウントを作成し、ログイン済であること。

また、GCP上にWindows端末の仮想マシンを作成済であること。

その手順は以下を参照のこと。

www.purin-it.work

www.purin-it.work

 

さらに、以下のようにGCS(Google Cloud Storage)上にファイルを配置済であること。

f:id:purin_it:20190624233542p:plain

GCS(Google Cloud Storage)上にファイルを配置する手順については、以下を参照のこと。

www.purin-it.work

 

やってみたこと

  1. gsutil lsコマンドによるファイルの確認
  2. gsutil cpコマンドによるファイルのコピー
  3. 複数ファイルのファイル名と行数の出力

 

gsutil lsコマンドによるファイルの確認

1) 以下のように、「gsutil ls gs://(バケット名)/ファイルパス」で、GCS(Google Cloud Storage)上のファイルを確認することができる。

f:id:purin_it:gsutil_ls_1

なお、ファイルパス中の「*」は、0文字以上の任意の文字列を表す。

 

2) 以下のように、「gsutil ls -l gs://(バケット名)/ファイルパス」と「-l」オプションを付与すると、GCS(Google Cloud Storage)上のファイルのサイズや更新日時も確認することができる。

f:id:purin_it:gsutil_ls_2

 

gsutil cpコマンドによるファイルのコピー

1) 以下のように、「gsutil cp gs://(バケット名)/ファイルパス .」で、GCS(Google Cloud Storage)上のファイルを、ローカル端末のカレントディレクトリ(.)にコピーすることができる。また、ファイルがコピーされたことの確認は「dir」コマンドで行える。

f:id:purin_it:gsutil_cp_1

 

コピー後の各CSVファイルは、以下の通り。

f:id:purin_it:gsutil_cp_2

f:id:purin_it:gsutil_cp_3

f:id:purin_it:gsutil_cp_4

それぞれ、GCS(Google Cloud Storage)上にコピーしたCSVファイルと同じ内容であることを確認している。

複数ファイルのファイル名と行数の出力

1) 以下のようなbatプログラムを利用することで、カレントディレクトリ上の複数ファイルのファイル名と行数を、一括でCSV形式に出力することができる。

f:id:purin_it:line_count_1

<count_file_line.batのプログラム内容>

@echo off

REM %%jに、カレントディレクトリのcsvファイルを順次入力
REM /f "usebackq"を使用することで、in句にバッククォート(`)が使用できる
for /f "usebackq" %%j in (`dir /B *.csv`) do (

    REM ファイル名,を改行コード無しで表示
    set /p<NUL=%%j,
    
    REM 指定したファイル名の行数を表示
    find /C /V "" < %%j
)

 

2) 1)のプログラムを、行数を数えるCSVファイルと同じディレクトリに配置し実行すると、以下のように、それぞれのCSVファイル名と行数をカンマ区切りで出力できる。

f:id:purin_it:line_count_2

 

3) 以下のように、1)のプログラムの実行結果を、別ファイルに出力することもできる。ファイルの出力内容は、「type」コマンドにて確認できる。

f:id:purin_it:line_count_3

 

さらに、ファイルの出力内容をサクラエディタで確認した結果は、以下の通り。

f:id:purin_it:line_count_4