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