Shell指令碼逐行處理文字檔案技巧

大雄45發表於2021-05-15
導讀 本文主要給大家介紹了關於 如何逐行處理文字檔案的相關資料

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

1.透過read 完成.

read  從標準輸入中讀取一行,並把輸入行的每個欄位的值指定給 shell 變數,用 IFS(內部欄位分隔符)變數中的字元作為分隔符。VariableName (變數名)引數指定給每一個欄位的值,由 VariableName (變數名)引數指定的以此類推,直到最後一個欄位。

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

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

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

cat data.dat | while read line
do
 echo "File:${line}"
done
 
while read line
do
 echo "File:${line}"
done < data.dat
2.使用awk命令完成

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

語法格式:awk [選項] '指令' 操作檔案

常用選項:-F 指定分隔符,分隔符用""引起來

-v:var=value在awk程式開始之前指定一個值valu給變數var,這些變數值用於awk程式的BEGIN快

-f:後面跟一個儲存了awk程式的檔案,代替在命令列指定awk程式
利用awk讀取檔案中的每行資料,並且可以對每行資料做一些處理,還可以單獨處理每行資料裡的每列資料.

cat data.dat | awk '{print $0}'
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確定.

for line in $(cat data.dat)
do
 echo "File:${line}"
done
 
for line in `cat data.dat`
do
 echo "File:${line}"
done

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

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

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

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


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2772407/,如需轉載,請註明出處,否則將追究法律責任。

相關文章