感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

bash CSVファイルのXカラム目を取得する方法

スポンサーリンク

前回はCSVファイルを読み込んでいくサンプルを作ったが、今度はCSVの特定のカラムを取得するサンプルを作る。
結論として、cut関数を以下のように使えば、カラムを取得可能だ。

`echo ${result} | cut -d ',' -f 1`

これだけでは意味がわからないと思うので、全体像を見ていく。

まず、読み込むファイルは以下のようなものだ。

##hospital list
takashi,28,doctor
yuka,27,narse

##company list
yuji,30,mitsubishi
nao,24,google

このファイルは、空行やコメントが混じっている。
1カラム目が名前、2カラム目が年齢、3カラム目が職業を表す。

で、このファイルの1カラム目。名前だけを表示してみよう。
空行やコメントはもちろん排除する。

サンプルはこんな感じだ。

#!/bin/sh

readonly READ_FILE="test.csv"

function read_csvfile() {
   local file_name=$1

   while read LINE
   do
      #空行を飛ばす
      local result=`echo ${LINE} | tr -d "\r" | tr -d "\n"`

      #コメント行や空行を読み飛ばす
      if [ `echo ${result} | egrep "^#" | wc -l` -gt 0 ] || [ "${result}" == "" ]; then
          continue
      fi

      local name=`echo ${result} | cut -d ',' -f 1`
      echo ${name}
   done < ${file_name}
}

read_csvfile ${READ_FILE}

こいつを実行してみると、以下のように画面に表示される。

takashi
yuka
yuji
nao

名前だけ取り除くことができたようだ。
cut -f 1の部分の数字を、2とか3に変えると、2カラム目とか3カラム目を取得することもできる。

入門bash 第3版

入門bash 第3版

bashクックブック

bashクックブック