Bash・Shellでループ処理で1行ずつテキストファイルを読み込む方法

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はいろいろな書き方が出来てしまいますが、

正しい書き方をしないとバッチ処理やサーバ性能に影響が出てしまうため注意しましょう。

よかったらシェアしてね!
  • URLをコピーしました!
目次