環境
・macOS Big Sur バージョン 11.2.3
・Bash version 3.2.57
結果
使い方は、下記のコードをaddDoubleQuotation.shという名前で保存したなら、
Macのターミナル.appから、下記のコマンドで実行してください。
addDoubleQuotation.shも対象のファイルもパスには気をつけてください。
実行すると、元ファイルと同じディレクトリに”output_対象のcsvファイル名”で、ファイルが生成されます。
sh addDoubleQuotation.sh 対象のCSVファイル名
addDoubleQuotation.sh
#!/bin/bash
echo 'Start'
INPUT_FILE=$1
echo "INPUT_FILE: ${INPUT_FILE}"
INPUT_FILE_DIR=$(dirname ${INPUT_FILE})
INPUT_FILE_NAME=$(basename ${INPUT_FILE})
TMP_FILE="${INPUT_FILE_DIR}/tmp_${INPUT_FILE_NAME}"
OUTPUT_FILE="${INPUT_FILE_DIR}/output_${INPUT_FILE_NAME}"
echo "OUTPUT_FILE: ${OUTPUT_FILE}"
#処理開始
cat ${INPUT_FILE} > ${TMP_FILE}
#CRLFの場合は、LFに変換する
grep -q 'r$' ${TMP_FILE}
if [ $? -eq 0 ] ; then
echo 'This file is CRLF'
sed 's/r//g' ${INPUT_FILE} > ${TMP_FILE}
fi
#囲み文字を追加する処理を開始
cat ${TMP_FILE} | while read line || [ -n "${line}" ]
do
echo ""${line}"" >> ${OUTPUT_FILE}
done
#CRLFの場合は、CRLFにもどす
grep -q 'r$' ${TMP_FILE}
if [ $? -eq 0 ] ; then
sed 's/$/r/g' --in-place ${OUTPUT_FILE}
fi
#中間ファイル削除
rm ${TMP_FILE}
echo 'End'
仕様
MacでテキストエディタなどでCSVとして保存すると、改行コードはLFになるかと思いますが、
Excelで保存したCSVに対応するため、改行コードがCRLFでも動作するようになっています。
また、最終行の末尾に改行がなかった場合は、自動的に追加されるようになっています。
コードについて
元のCSVファイル(INPUT_FILE)に上書きしたくなかったため、
元のCSVファイル(INPUT_FILE)を、一度中間ファイル(TMP_FILE)に出力してから、
囲み文字をつける処理をしています。