精通awk系列(3):鋪墊知識:讀取文件的幾種方式


回到:linux


讀取文件的幾種方式

讀取文件有以下幾種常見的方式:shell

下面使用Shell的read命令來演示前4種讀取文件的方式(第五種按字節數讀取的方式read不支持)。3d

按字符數量讀取

read的-n選項和-N選項能夠指定一次性讀取多少個字符。code

# 只讀一個字符
read -n 1 data <a.txt

# 讀100個字符,但若是不足100字符時遇到換行符則中止讀取
read -n 100 data < a.txt

# 強制讀取100字符,遇到換行符也不中止
read -N 100 data < a.txt

若是按照字符數量讀取,直到把文件讀完,則使用while循環,且將文件放在while結構的後面,而不能放在while循環的條件位置:blog

# 正確
while read -N 3 data;do
  echo "$data"
done <a.txt


# 錯誤
while read -N 3 data < a.txt;do
  echo "$data"
done

按分隔符讀取

read命令的-d選項能夠指定讀取文件時的分隔符。get

# 一直讀取,直到遇到字符m才中止,並將讀取的數據保存到data變量中
read -d "m" data <a.txt

若是要按分隔符讀取並讀完整個文件,則使用while循環:awk

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

一次性讀整個文件

要一次性讀取完整個文件,有兩種方式:im

  • 按照字符數量讀取,且指定的字符數要大於文件的總大小
  • 按分隔符讀取,且指定的分隔符是文件中不存在的字符,這樣的話會一直讀取,由於找不到分隔符而讀完整個文件
# 指定超出文件大小的字符數量
read -N 1000000 data <a.txt
echo "$data"

# 指定文件中不存在的字符做爲分隔符
read -d "_" data <a.txt
echo "$data"
相關文章
相關標籤/搜索