シェルスクリプトでヘッダー付きのCSVを連結したい

data-0.csv data-1.csv data-2.csv
という同じ列フォーマットのヘッダー付きのCSVを data.csv という一つのCSVファイルに連結したい。
連結後、元ファイルは削除する。

input_dir=./data
files="${input_dir}/data-*.csv"
cat_file="${input_dir}/data.csv"

for filepath in ${files}

do
  if [ -s ${cat_file} ]; then
    sed -e "1d" ${filepath} >> ${cat_file}
  else
    cat ${filepath} > ${cat_file}
  fi
  rm ${filepath}
done

参考にしたサイト:

シェルスクリプトで親ディレクトリのパスを取得したい

echo $(cd $(dirname $0)/..;pwd)

Bashシェルスクリプトで自分の絶対パスを取得
を参考に親の場合は /.. を追加しているだけ。

ところで

$(<UNIXコマンド>)

コマンド置換 と呼ばれているもので、どちらかというと以下のバッククォートの方がよく見かける

`<UNIXコマンド>`

同じことをバッククォートでしてみるとこうなる。

echo `cd \`dirname $0\`/..;pwd`

エスケープが読みにくくなるので$()を利用するのがスマート

コマンド置換については、この辺りも参考になる: Command substitution