設定ファイル (リストファイル) を作成して、行毎にループして処理するサンプルスクリプトを作成する。下記のスペース区切りの場合とカンマ区切りの場合の リストファイル 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 件のコメント :
コメントを投稿