如何使用 Bash 逐行讀取檔案

Suraj Joshi 2020年10月15日
如何使用 Bash 逐行讀取檔案

在 Bash 中,我們可能會遇到幾種情況,需要逐行處理儲存在檔案中的資料。在這種情況下,我們需要讀取檔案的內容。我們使用 Bash 中的 read 命令來逐行讀取檔案。

在 Bash 中逐行讀取檔案

語法

while IFS= read -r line
do
  echo "$line"
done < file_name

它一行一行地讀取檔案 file_name 的內容,並在終端上逐行列印。迴圈執行,直到我們到達檔案的終點。IFS 被設定為空字串,這有助於保留前導和尾部的空白。

另外,上面的命令也可以用下面的命令代替。

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 命令,命令會根據 IFS 的值來分隔一行中的欄位。

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!

這裡,檔案中的每一行都被分成兩段,因為我們已經向 read 命令傳遞了兩個變數。第一段將分配給 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!

這裡,檔名 file.txt 作為 cat 命令的輸出傳給程式。

作者: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn