気にしたことなかった。
いつも「a composer」をお読みいただきありがとうございます。banba(@banba929)です。
最近はもっぱらLinuxに触れています。CLIはなんだかかっこよくてテンションが上がりますね。
普段何気なく書いているシェルスクリプト。1行ごとの処理を行う際、僕は「while read」を用いて書いています。いつも通り書いていると先輩から「forとwhile readだとどっちが速いの?」と聞かれました。
「同じようにループしているから変わんないんじゃないですか?」なんて言いましたが何となく気になったので自宅のMacで検証してみます。
多分速さは変わんないよねー。
MacなのでLinuxではなくUnix環境ですが、なにかのお役に立てばと思います。
とりあえず記述
1行ごとに読む処理
for文
#/bin/bash
for line in `cat ループ処理したいテキスト.txt`
do
echo ${line} #1行ごとにechoする
done
while read文
#/bin/bash
while read line
do
echo ${line} #1行ごとにechoする
done < ループ処理させたいテキスト.txt
こんな感じですよね。やっている内容は全く同じなので、処理時間は変わらない予想です。
検証内容

今回処理するのはこちらのテキスト。約5万行のカンマ区切りのテキストファイル(CSVファイルかな)の2カラム目を別テキストに書き込む処理をします。
for文

While read文

こんな感じのシェルスクリプトを書きました。処理内容は全く同じ。
カンマ区切りの2カラム目を1行ずつ読み、別ファイルに追加していく処理です。同じファイルを読み込ませるようにしました。
処理開始
1回目
for文
それではfor文からやってみます。

for文の結果は3分52秒でした。
while read文
次にwhile read文です。

while read文の結果は3分58秒でした。6秒の差がありますね。やはりあまり差はないですね。もっと大きなファイルを使うと変わるのかもしれませんが。
2回目
なんとなく1回だと信用できなかったのでもう一度やってみました。

for文が3分51秒
while read分が3分56秒という結果に終わりました。
処理時間の差は5秒に縮まりましたが、あまり変わらないようです。
まとめ
やはりやっていることはほぼ同じなので大して処理時間は変わりませんでした。残念です。
シェルスクリプトはループさせると遅くなるそうなので、基本的にはコマンドや正規表現を駆使し、ループさせないよう書きたいですね。
僕は最近awkコマンドの便利さに感動していました。使いこなさなくては…
Linuxに触れ始めたのもつい最近なので、もっと使いこなしていきたいものです。CLI楽しいです…ワンライナーでちゃちゃっと書けるように頑張ります…