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


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

コメントを投稿