2013-11-26 116 views
0

比方說,你有以下輸入文件分割文件打破

Some text. It may contain line 
breaks. 

Some other part of the text 

Yet an other part of 
the text 

你想要遍歷每個文本部分(由兩個換行符(\n\n)分隔),所以在第一次迭代是 我只會得到:

Some text. It may contain line 
breaks. 

在第二次迭代我會得到:

Some other part of the text 

而在最後一次迭代我會得到:

Yet an other part of 
the text 

我嘗試這樣做,但它似乎並沒有工作,因爲IFS只支持一個角色?

cat $inputfile | while IFS=$'\n\n' read part; do 
    # do something with $part 
done 

回答

1

這是anubhava純bash的解決方案:

#!/bin/bash 

COUNT=1; echo -n "$COUNT: " 
while read LINE 
do 
    [ "$LINE" ] && echo "$LINE" || { ((++COUNT)); echo -n "$COUNT: " ;} 
done 
+0

我最終使用了這個變體(沒有COUNT),因爲我有awk解決方案的問題。我的文本部分包含很多像'''或'''這樣的字符,需要通過'system()'調用傳遞給另一個腳本。 – MarcDefiant

2

用AWK與空RS

awk '{print NR ":", $0}' RS= file 
1: Some Text. It may contains line 
breaks. 
2: Some Other Part of the Text 
3: Yet an other Part of 
the Text 

你可以清楚地看到你的輸入文件有3條記錄現在(每個記錄印有記錄#輸出)。

+0

我如何可以遍歷與一個'while'或'for'循環,如你問題出? – MarcDefiant

+0

使用'awk',你不需要循環迭代,因爲awk通過記錄處理輸入記錄。你可以使用每個記錄(用'$ 0'表示)和文件由awk – anubhava

+1

oops,沒有看到你的答案...張貼副本... :(+1和刪除我的。 – Kent