スペース区切りの 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 '{print $1}'` col2=`echo ${line} | awk '{print $2}'` col3=`echo ${line} | awk '{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 '{print $1}'` col2=`echo ${line} | awk '{print $2}'` col3=`echo ${line} | awk '{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
補足
項目間のスペースの数は 1 つだけでなく、複数でも上記のシェルは同様に処理できる。下記のようにヘッダ行にあわせて 2 行目以降の項目間のインデントで複数のスペースを設定しても問題なく動作する。
・sample.csv
ヘッダa ヘッダb ヘッダc 項目1a 項目1b 項目1c 項目2a 項目2b 項目2c 項目3a 項目3b 項目3c
スポンサーリンク
0 件のコメント :
コメントを投稿