Bash でファイルを一行ずつ読み込む方法
Suraj Joshi
2021年3月5日
Bash では、ファイルに保存されているデータを一行ずつ処理しなければならない状況にいくつか直面することがあります。このような場合、ファイルの内容を読み込む必要があります。ファイルを一行ずつ読み込むには、Bash の read
コマンドを使用します。
Bash でファイルを一行ずつ読む
構文
while IFS= read -r line
do
echo "$line"
done < file_name
ファイル file_name
の内容を 1 行ずつ読み込み、ターミナルに 1 行ずつ表示します。ループはファイルの最後に到達するまで実行されます。IFS
はヌル文字列に設定されており、先頭と末尾の空白を保持するのに役立ちます。
あるいは、上記のコマンドを 1 行内で以下のコマンドに置き換えることもできます。
while IFS= read -r line; do echo $line; done < file_name
例:Bash でファイルを一行ずつ読み込む
この例では、各行に数字を含むファイル file.txt
を読み込んで、ファイル内のすべての数字の和を求めます。
file.txt
の内容
1
5
6
7
8
10
#!/bin/bash
sum=0
echo "The numbers in the file are:"
while IFS= read -r line
do
echo "$line"
sum=$(( $sum + $line ))
done < file.txt
echo "The sum of the numbers in the file is:$sum"
出力:
The numbers in the file are:
1
5
6
7
8
The sum of the numbers in the file is:27
これは file.txt
という名前のファイルから一行ずつ数値を読み込んで、それらの数値を合計し、最後にその合計をエコーで出力します。
例:ファイル内のフィールドを変数に設定する
複数の変数を read
コマンドに渡すことで、ファイル内のフィールドを変数に設定することができます。
file.txt
の内容
Rohit-10
Harish-30
Manish-50
Kapil-10
Anish-20
#!/bin/bash
while IFS=- read -r name earnings
do
echo "$name" has made earnings of "$earnings" pounds today!
done < file.txt
出力:
Rohit has made earnings of 10 pounds today!
Harish has made earnings of 30 pounds today!
Manish has made earnings of 50 pounds today!
Kapil has made earnings of 10 pounds today!
ここでは、2つの変数を read
コマンドに渡しているので、ファイルの各行は 2つのセグメントに分割されています。最初のセグメントは行頭から最初の -
までの name
変数に代入され、残りの部分は earnings
変数に代入されます。
Bash でファイルを読み込む別の方法
#!/bin/bash
while IFS=- read -r name earnings
do
echo "$name" has made earnings of "$earnings" pounds today!
done < <(cat file.txt )
出力:
Rohit has made earnings of 10 pounds today!
Harish has made earnings of 30 pounds today!
Manish has made earnings of 50 pounds today!
Kapil has made earnings of 10 pounds today!
ここでは、cat
コマンドの出力として file.txt
というファイル名がプログラムに渡されます。
著者: Suraj Joshi
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn