回到: "Linux系列文章" "Shell系列文章" "Awk系列文章" 讀取文件的幾種方式 讀取文件有如下幾種常見的方式: 下麵使用Shell的read命令來演示前4種讀取文件的方式(第五種按位元組數讀取的方式read不支持)。 按字元數量讀取 read的 n選項和 N選項可以指定一次性讀取多少個 ...
回到:
讀取文件的幾種方式
讀取文件有如下幾種常見的方式:
下麵使用Shell的read命令來演示前4種讀取文件的方式(第五種按位元組數讀取的方式read不支持)。
按字元數量讀取
read的-n選項和-N選項可以指定一次性讀取多少個字元。
# 只讀一個字元
read -n 1 data <a.txt
# 讀100個字元,但如果不足100字元時遇到換行符則停止讀取
read -n 100 data < a.txt
# 強制讀取100字元,遇到換行符也不停止
read -N 100 data < a.txt
如果按照字元數量讀取,直到把文件讀完,則使用while迴圈,且將文件放在while結構的後面,而不能放在while迴圈的條件位置:
# 正確
while read -N 3 data;do
echo "$data"
done <a.txt
# 錯誤
while read -N 3 data < a.txt;do
echo "$data"
done
按分隔符讀取
read命令的-d選項可以指定讀取文件時的分隔符。
# 一直讀取,直到遇到字元m才停止,並將讀取的數據保存到data變數中
read -d "m" data <a.txt
如果要按分隔符讀取並讀完整個文件,則使用while迴圈:
while read -d "m" data ;do
echo "$data"
done <a.txt
按行讀取
read預設情況下就是按行讀取的,一次讀取一行。
# 從a.txt中讀取第一行保存到變數data中
read line <a.txt
如果要求按行讀取完整個文件,則使用while迴圈:
while read line;do
echo "$line"
done <a.txt
一次性讀整個文件
要一次性讀取完整個文件,有兩種方式:
- 按照字元數量讀取,且指定的字元數要大於文件的總大小
- 按分隔符讀取,且指定的分隔符是文件中不存在的字元,這樣的話會一直讀取,因為找不到分隔符而讀完整個文件
# 指定超出文件大小的字元數量
read -N 1000000 data <a.txt
echo "$data"
# 指定文件中不存在的字元作為分隔符
read -d "_" data <a.txt
echo "$data"