テキストを1行ずつ読み込んで処理するシェルスクリプト

2017年3月4日(更新: 2017年3月4日)

テキストファイルから、テキストを1行ずつ読み込んで処理を行うシェルスクリプトの書き方についてです。

例えば、以下のようなテキストファイルを読み込んで、1行ずつターミナルに出力したいとします。

sample.txt

this is sample text.
apple
banana
orange
end
 

シェルスクリプトのサンプル

実際に読み込んで表示するシェルスクリプトは以下のようになります。

スクリプト実行時の第一引数に、ファイルのパスを受け取るようにしています。

loadTextFile

#!/bin/sh

# テキストファイルを読み込んで中身を表示
# 最終行の最後に改行コードがないと、最終行が読み込まれないので注意
# また、テキスト中に空行があるとそこで処理が止まるので注意

while read line
do
    echo "$line"
done < ${1}

実行結果は以下のようになります。

シェルスクリプトでテキストを一行ずつ読み込んで表示した結果

注意点はスクリプト内のコメントに書いた通りですが、コマンド read は改行コードまでを読むため、最終行の末尾に改行コードが必要です。

サンプルの動作と応用

while read の後に設定した変数に、一行ごとのテキストが格納されますので、ループ内で各行に対する処理を書きます。

上記のサンプルでは単純に echo で出力しています。

例えば、行番号も出力したいという場合は以下のように書くことができます。

#!/bin/sh

COUNT=0 # 行番号をカウントするための変数

while read line
do
    ((COUNT++))
    echo "$COUNT: $line"
done < ${1}

実行結果は以下のようになります。

一行ずつ行番号付きで出力するシェルスクリプト

コメントを残す

メールアドレスが公開されることはありません。