Table of Contents
テキストファイルから、テキストを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}
実行結果は以下のようになります。