Linux シェルスクリプト|カンマ区切りの CSV ファイルを行毎にループして処理するサンプルスクリプト|ヘッダ行がない場合とある場合|bash シェル


カンマ区切りの CSV ファイルを行毎にループして処理するサンプルスクリプトを作成する。下記のヘッダ行がない場合とある場合の CSV ファイル sample.csv を処理するスクリプトを作成する。


・ヘッダ行なし sample.csv

項目1a,項目1b,項目1c
項目2a,項目2b,項目2c
項目3a,項目3b,項目3c

・ヘッダ行あり sample.csv

※1 行目はヘッダ

ヘッダa,ヘッダb,ヘッダc
項目1a,項目1b,項目1c
項目2a,項目2b,項目2c
項目3a,項目3b,項目3c


スペース区切りの CSV ファイルを行毎にループして処理するサンプルスクリプト|ヘッダ行がない場合とある場合|Linux bash シェルスクリプト


設定ファイル (リストファイル) を作成して行毎にループして処理するサンプルスクリプト|コメント行はスキップさせる|Linux bash シェルスクリプト




ヘッダ行がないカンマ区切りの CSV ファイルを for 文でループして処理

下記の sample.sh を作成する。

・sample.sh

#!/bin/bash

#IFSを「改行」に設定して、下記のfor文でsample.csvを行毎にループする
PRE_IFS=${IFS}
IFS=$'\n'

for line in `cat sample.csv`
do
  col1=`echo ${line} | awk -F "," '{print $1}'`
  col2=`echo ${line} | awk -F "," '{print $2}'`
  col3=`echo ${line} | awk -F "," '{print $3}'`

  #ここに処理を実装
  echo ${col1}
  echo ${col2}
  echo ${col3}

done

#IFSの設定を元に戻す
IFS=${PRE_IFS}


・ヘッダ行なし sample.csv

項目1a 項目1b 項目1c
項目2a 項目2b 項目2c
項目3a 項目3b 項目3c

この sample.sh を実行すると、下記が標準出力される。

項目1a
項目1b
項目1c
項目2a
項目2b
項目2c
項目3a
項目3b
項目3c



ヘッダ行があるカンマ区切りの CSV ファイルを for 文でループして処理

下記の sample.sh を作成する。

・sample.sh

#!/bin/bash

#IFSを「改行」に設定して、下記のfor文でsample.csvを行毎にループする
PRE_IFS=${IFS}
IFS=$'\n'

for line in `cat sample.csv | sed '1d'`
do
  col1=`echo ${line} | awk -F "," '{print $1}'`
  col2=`echo ${line} | awk -F "," '{print $2}'`
  col3=`echo ${line} | awk -F "," '{print $3}'`

  #ここに処理を実装
  echo ${col1}
  echo ${col2}
  echo ${col3}

done

#IFSの設定を元に戻す
IFS=${PRE_IFS}


・ヘッダ行あり sample.csv

※1 行目はヘッダ

ヘッダa ヘッダb ヘッダc
項目1a 項目1b 項目1c
項目2a 項目2b 項目2c
項目3a 項目3b 項目3c


この sample.sh を実行すると、下記が標準出力される。sed '1d' で 1行目のヘッダ行を除外して処理している。

項目1a
項目1b
項目1c
項目2a
項目2b
項目2c
項目3a
項目3b
項目3c




スポンサーリンク

0 件のコメント :

コメントを投稿