Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2722

【シェルスクリプト】ファイルを1行ずつ読み込んで処理する方法

$
0
0

while read文を使って次のようにするとテキストファイルを1行ずつ読み込んでなんやかんやすることができます。(Solarisではこの書き方はできないようですが、あまり使われていないOSですので考慮しなくても良いと思います。)

#!/bin/bashFILE_NAME=/fuga/hoge/fizz.txt
while read LINE
do# コマンドdone< ${FILE_NAME}

while文に\${FILE_NAME}をリダイレクトするとreadコマンドで\${FILE_NAME}の中身を1行ずつ読み込んでLINEという変数に格納します。(変数名はLINEでなくても問題ありません。)

このようなコードを使うと「3カラム目の値がfizzである行を判別してうんたらかんたらする」みたいなことができます。

注意点と回避策

while文の末尾でリダイレクトする都合上「どのファイルを読み込んでいるのか」ということが上からシェルスクリプトを読んでいくと分かりづらいので、while文の上にコメントで「このファイルを読み込みます」ということを書き添えておくと良いと思います。

FILE=/hoge/fuga.txt

# FILEを読み込んで処理while read LINE
# コマンドdone< "${FILE}"

for文ではファイルを1行ずつ読み込めない

私は当初for文で上記の処理を実現しようとして次のようなコードを書いていました。

FILE=/hoge/fuga.txt
# これは動かないfor LINE in"${FILE}"do# コマンドdone

結果から言うとこのコードは動きませんでした。
ディレクトリを読み込んでファイルを1つずつ処理することができたので、その延長線上で考えてファイルを1行ずつ処理することもできるやろ、程度に考えてしまいました。

# ディレクトリ内にあるファイルを1つずつ読み込む# これは動くfor FILE in /usr/local/hoge/*do
  echo$FILEdone

ファイルを1行ずつ読み込む場合は 「while read line」と覚えると良いでしょう。


Viewing all articles
Browse latest Browse all 2722

Trending Articles