設定ファイル (リストファイル) を作成して、行毎にループして処理するサンプルスクリプトを作成する。下記のスペース区切りの場合とカンマ区切りの場合の リストファイル sample.lst を処理するスクリプトを作成する。
リストファイルの行頭に「#」をつけるとコメント扱いとし、処理をスキップさせるようにする。
また、下記のカンマ区切り sample.lst では、
orange,,300 のように設定値がない項目がある
mandarin orange,typeE,500 の mandarin orange ように項目に半角スペースを含む
場合でも処理することが可能である。このような項目がある場合、スペース区切りでは対応するのが難しい。
・スペース区切り sample.lst
#fruit price banana 100 apple 200 orange 300 #lemon 400 cherry 500
・カンマ区切り sample.lst
#fruit type price banana,type_a,100 apple,type_b,200 orange,,300 #lemon,type_d,400 mandarin orange,type_e,500
カンマ区切りの CSV ファイルを行毎にループして処理するサンプルスクリプト|ヘッダ行がない場合とある場合|Linux bash シェルスクリプト
スペース区切りの CSV ファイルを行毎にループして処理するサンプルスクリプト|ヘッダ行がない場合とある場合|Linux bash シェルスクリプト
スペース区切りの 設定ファイル (リストファイル) を for 文でループして処理
下記の sample.sh を作成する。
・sample.sh
#!/bin/bash
#IFSを「改行」に設定して、下記のfor文でsample.csvを行毎にループする
PRE_IFS=${IFS}
IFS=$'\n'
for line in `cat sample.lst`
do
#コメント行は処理しない
comment=`echo ${line} | cut -b 1`
if [ "${comment}" = "#" ]; then
continue
fi
col1=`echo ${line} | awk '{print $1}'`
col2=`echo ${line} | awk '{print $2}'`
#ここに処理を実装
echo ${col1}
echo ${col2}
done
#IFSの設定を元に戻す
IFS=${PRE_IFS}
・スペース区切り sample.lst
#fruit price banana 100 apple 200 orange 300 #lemon 400 cherry 500
この sample.sh を実行すると、下記が標準出力される。リストファイルの # の行は、コメント扱いをして、処理対象外となり標準出力されない。
banana 100 apple 200 orange 300 cherry 500
カンマ区切りの設定ファイル (リストファイル) を for 文でループして処理
下記の sample.sh を作成する。
・sample.sh
#!/bin/bash
#IFSを「改行」に設定して、下記のfor文でsample.csvを行毎にループする
PRE_IFS=${IFS}
IFS=$'\n'
for line in `cat sample.lst`
do
#コメント行は処理しない
comment=`echo ${line} | cut -b 1`
if [ "${comment}" = "#" ]; then
continue
fi
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.lst
#fruit type price banana,type_a,100 apple,type_b,200 orange,,300 #lemon,type_d,400 mandarin orange,type_e,500
この sample.sh を実行すると、下記が標準出力される。リストファイルの # の行は、コメント扱いをして、処理対象外となり標準出力されない。
banana type_a 100 apple type_b 200 orange 300 mandarin orange type_e 500
スポンサーリンク

0 件のコメント :
コメントを投稿