2013-02-06 33 views
1

我有一個文本文件,它看起來像這樣:以塊爲單位而不是逐行讀取文件?

[1] Header information Timestamp Text begins 
Text continues 
Text continues 
Text continues 

[2] Header information Timestamp Text begins 
Text continues 
Text continues 

[3] Header information Timestamp Text begins 
Text continues 
Text continues 
Text continues 

我想讀取該文件,並處理每一個條目單獨(他們從1到20或30日線是任何地方)。

有沒有什麼辦法通過使用空行作爲分隔符來遍歷文件?

回答

4

答案是肯定的!

awk -vRS="" '...'將空白行視爲行分隔符。

把你的例子和測試:

kent$ cat b.txt 
[1] Header information Timestamp Text begins 
Text continues 
Text continues 
Text continues 

[2] Header information Timestamp Text begins 
Text continues 
Text continues 

[3] Header information Timestamp Text begins 
Text continues 
Text continues 
Text continues 

kent$ awk -vRS="" '{print "==== new block here ===="}1' b.txt 
==== new block here ==== 
[1] Header information Timestamp Text begins 
Text continues 
Text continues 
Text continues 
==== new block here ==== 
[2] Header information Timestamp Text begins 
Text continues 
Text continues 
==== new block here ==== 
[3] Header information Timestamp Text begins 
Text continues 
Text continues 
Text continues 
+0

賓果!這完美地解決了它! – Charles

+0

現在我的問題是使用它來循環遍歷文件來處理每個塊... – Charles

0

這裏是一個純bash解決方案:

{ 
    read -r block # First line only 
    while read -r; do 
     if [[ $REPLY =~ ^$ ]]; then 
      # Do what you like with the contents 
      # $block here, then ... 
      block="" 
     else 
      block+="$REPLY" 
     fi 
    done 
} < file.txt