Bash・Shellで良く使う処理の1つに、
「1行ずつテキストを読み込んで処理する」というものがあります。
Shellの書き方には大きく分けて2つあり、
間違った書き方をするとリソースを消費したり処理に時間も掛かったりと、サーバに余計な負荷をかけてしまいます。
今回はShellで「1行ずつテキストを読み込んで処理する」ための正しいShellの書き方と間違った書き方の2つを紹介します。
なおサンプルとして読み込むテキストファイルを「sample.txt」としています。
目次
正しい書き方:ループ処理で1行ずつテキストを読み込む
まずは正しい書き方を紹介します。
↓のようにwhile文で1行ずつテキストファイルを読み込み処理を行いましょう。
while read line
do
処理内容
done < sample.txt
「while read line」が一番すっきり書け、処理も早いです。
また他の方法として↓も利用可能である。
cat sample.txt | while read line
do
処理内容
done
間違った書き方:テキストファイル内をすべて展開してからループ処理
次は間違った書き方を紹介します。
↓のようなfor文で書きますとテキストファイル内の全レコードを読み込んだ後に処理を行うので、
大きなファイルですとメモリ容量を多く使用したり、処理も遅くなったりします。
for line in `cat sample.txt`
do
処理内容
done;
Bash・Shellはいろいろな書き方が出来てしまいますが、
正しい書き方をしないとバッチ処理やサーバ性能に影響が出てしまうため注意しましょう。