LoginSignup
1
0

はじめに

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

keysvaluesを用意しているので、ヘッダーの文字列で一致する文字列を置換することをしています。
ここで、該当の文字列が存在すれば、一気に変換をしています。

まとめ

文字列を変換するのに、sedコマンドを使用しました。
他にもシェルコマンドはたくさんあるので、色々と勉強していきます。

最後までご覧いただき、ありがとうございました。

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0