1. 程式人生 > >linux【Shell指令碼】逐行處理文字檔案

linux【Shell指令碼】逐行處理文字檔案

經常會對文體檔案進行逐行處理,在Shell裡面如何獲取每行資料,然後處理該行資料,最後讀取下一行資料,迴圈處理.有多種解決方法如下:

1.通過read命令完成.

read命令接收標準輸入,或其他檔案描述符的輸入,得到輸入後,read命令將資料放入一個標準變數中.

利用read讀取檔案時,每次呼叫read命令都會讀取檔案中的"一行"文字.

當檔案沒有可讀的行時,read命令將以非零狀態退出.

複製程式碼
1 cat data.dat | while read line
2 do
3     echo "File:${line}"
4 done
5 
6 while read line
7 do
8 echo "File:${line}" 9 done < data.dat
複製程式碼

2.使用awk命令完成

awk是一種優良的文字處理工具,提供了極其強大的功能.

利用awk讀取檔案中的每行資料,並且可以對每行資料做一些處理,還可以單獨處理每行資料裡的每列資料.

1 cat data.dat | awk '{print $0}'
2 cat data.dat | awk 'for(i=2;i<NF;i++) {printf $i} printf "\n"}'

第1行程式碼輸出data.dat裡的每行資料,第2程式碼輸出每行中從第2列之後的資料.

如果是單純的資料或文字檔案的按行讀取和顯示的話,使用awk命令比較方便.

3.使用for var in file 命令完成

for var in file 表示變數var在file中迴圈取值.取值的分隔符由$IFS確定.

複製程式碼
1 for line in $(cat data.dat)
2 do 
3     echo "File:${line}"
4 done
5 
6 for line in `cat data.dat`
7 do 
8     echo "File:${line}"
9 done
複製程式碼

如果輸入文字每行中沒有空格,則line在輸入文字中按換行符分隔符迴圈取值.

如果輸入文字中包括空格或製表符,則不是換行讀取,line在輸入文字中按空格分隔符或製表符或換行符特環取值.

可以通過把IFS設定為換行符來達到逐行讀取的功能.

IFS的預設值為:空白(包括:空格,製表符,換行符).