Shellscript バックエンド

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

2018年5月7日

こんにちは!土門大貴(daikidomon)です。

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はいろいろな書き方が出来てしまいますが、正しい書き方をしないとバッチ処理やサーバ性能に影響が出てしまうため注意しましょう。

関連記事

-Shellscript, バックエンド

Copyright© スタートアップIT企業社長のブログ , 2020 All Rights Reserved.