概要
while read line; do key=`echo $line | cut -d ',' -f 1` val=`echo $line | cut -d ',' -f 2` echo "${key} ${val}" done < test.csv
と書いたところ指摘された。
指摘された理由としては
「1行ずつcutコマンドが処理されるため、
ファイルサイズが大きくなるにつれて処理時間も大きくなる」
ということだった。
結論
書き方としては下記の通り。
OLDIFS=$IFS IFS=, while read key val ; do echo "${key} ${val}" done < test.csv IFS=$OLDIFS
大きな点としては環境変数のIFS
を使用している。
IFSについて
IFS
は Internal Filed Separator の略らしく区切り文字を設定する。
デフォルトでは空白らしくスペース、改行、タブが含まれる。
処理の流れとしてはOLDIFS
でデフォルトのIFS
の状態を格納して、
ファイル処理の終了後に元のIFS
の設定に戻している。