【Shell指令碼】逐行處理文字檔 && 空格變換行

來源:互聯網
上載者:User

參考: http://www.cnblogs.com/dwdxdy/archive/2012/07/25/2608816.html

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

1.通過read命令完成.

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

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

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

1 cat data.dat | while read line2 do3     echo "File:${line}"4 done5 6 while read line7 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 done5 6 for line in `cat data.dat`7 do 8     echo "File:${line}"9 done

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

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

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

demo:

假設現需要讀取如下的檔案rollback_config.txt:

ROLLBACK_SERVICES:upserv  checkserv

ROLLBACK_VERSION:v1.1

使用   for line in `cat rollback_config.txt`; do echo "${line}"; done  讀取的結果會是:

ROLLBACK_SERVICES:upserv

checkserv

ROLLBACK_VERSION:v1.1

顯然不是我們想要的。


解決方案:

IFS_old=$IFS
IFS=$'\n'
for line in  `cat  rollback_config`;do
echo "$line"
done;
IFS=$IFS_old

這樣一來就可以了。




IFS的預設值為:空白(包括:空格,定位字元,分行符號).

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.