如何使用 Bash 逐行讀取檔案
Suraj Joshi
2020年10月15日
在 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 is a backend software engineer at Matrice.ai.
LinkedIn