はじめに
csvを出力したのちに、「ヘッダーを変更したいなぁ」 と思ったことはありますでしょうか?
そんな要望に応えて、シェルで簡単にヘッダーを変更できるスクリプトを実装しました。
その内容をアウトプットいたします。
実装
#!/bin/bash
INPUT_FILE="test.csv"
OUTPUT_FILE="output.csv"
keys=("abc" "def" "ghi")
values=("ABC" "DEF" "GHI")
TEMP_HEADER_FILE="temp_header.csv"
# 1行目(ヘッダー)を取得し、一時ファイルに保存
head -n 1 "$INPUT_FILE" > "$TEMP_HEADER_FILE"
HEADER=$(cat "$TEMP_HEADER_FILE")
# ヘッダーを変換ルールに基づき置換する
for i in "${!keys[@]}"; do
HEADER=$(echo "$HEADER" | sed "s/${keys[$i]}/${values[$i]}/g")
done
# 修正後のヘッダーを書き込む
echo "$HEADER" > "$OUTPUT_FILE"
# ヘッダーを除いたデータ部分を追加
tail -n +2 "$INPUT_FILE" >> "$OUTPUT_FILE"
# 一時ファイルを削除
rm "$TEMP_HEADER_FILE"
echo "ヘッダーを修正したCSVファイルを $OUTPUT_FILE に出力しました。"
解説
まずはヘッダーを読み込み、変数HEADER
に入れます。
今回のメインは、以下の記載です。
for i in "${!keys[@]}"; do
HEADER=$(echo "$HEADER" | sed "s/${keys[$i]}/${values[$i]}/g")
done
keys
とvalues
を用意しているので、ヘッダーの文字列で一致する文字列を置換することをしています。
ここで、該当の文字列が存在すれば、一気に変換をしています。
まとめ
文字列を変換するのに、sed
コマンドを使用しました。
他にもシェルコマンドはたくさんあるので、色々と勉強していきます。
最後までご覧いただき、ありがとうございました。