2016-12-01 73 views
0

我有一些非常大的文本文件,這是從舊的大型機應用程序的輸出。我不再有權訪問源應用程序,但需要對輸出執行一些數據分析。文本文件處理:撤消文本換行(列和行)

的數據基本上製表符分隔值,但由於源系統它基於寬度和行數包裹值和斷開輸出

的文本文件的內容看起來像這樣(這是模型數據) :

  Page 1: 

      Col1 Col2 Col3 Col4 Col5 Col6 Col7 Col8 
      ------------------------------------------------------------ 
      1111 1111 1111 1111 1111 1111 1111 1111 
      2222 2222 2222 2222 2222 2222 2222 2222 
      3333 3333 3333 3333 3333 3333 3333 3333 
      4444 4444 4444 4444 4444 4444 4444 4444 
      5555 5555 5555 5555 5555 5555 5555 5555 
      6666 6666 6666 6666 6666 6666 6666 6666 
      7777 7777 7777 7777 7777 7777 7777 7777 
      ----------------------------------------------------------- 

      Col9 Col10 Col11     
      -------------------- 
      1111 1111 1111      
      2222 2222 2222      
      3333 3333 3333      
      4444 4444 4444      
      5555 5555 5555      
      6666 6666 6666      
      7777 7777 7777      
      -------------------- 

      Page 2: 


      Col1 Col2 Col3 Col4 Col5 Col6 Col7 Col8 
      ------------------------------------------------------------ 
      8888 8888 8888 8888 8888 8888 8888 8888 
      9999 9999 9999 9999 9999 9999 9999 9999 
      ----------------------------------------------------------- 

      Col9 Col10 Col11     
      -------------------- 
      8888 8888 8888 
      9999 9999 9999      
      -------------------- 

頁面將持續一段時間。

我想以編程方式轉換文件,以便列是連續的。即。最終的數據集看起來像一個更典型的CSV樣式分隔文件。

  Col1 Col2 Col3 Col4 Col5 Col6 Col7 Col8 Col9 Col10 Col11 
      ------------------------------------------------------------------------------------           
      1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 
      2222 2222 2222 2222 2222 2222 2222 2222 2222 2222 2222 
      3333 3333 3333 3333 3333 3333 3333 3333 3333 3333 3333 
      4444 4444 4444 4444 4444 4444 4444 4444 4444 4444 4444 
      5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 
      6666 6666 6666 6666 6666 6666 6666 6666 6666 6666 6666 
      7777 7777 7777 7777 7777 7777 7777 7777 7777 7777 7777 
      8888 8888 8888 8888 8888 8888 8888 8888 8888 8888 8888 
      9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 
      ------------------------------------------------------------------------------------- 

我不確定從哪裏開始 - 我可以使用像AWK這樣的東西來做這個或某種正則表達式。任何幫助起點,將不勝感激。

回答

1

我建議你可以使用csplit命令和paste命令。

+0

謝謝Csplit看起來是我後 - 乾杯 – Matt

0

我會使用解析器(例如Bison)。喜歡的東西:

goal:pages 

pages: pages page 

page: header rowsOfColumns { dumpCurrentPage(); } 

header: "page" num { curColumn = 0; } 

rowsOfColumns: rowsOfColumns aRow 

aRow: colHeaders dashes colData dashes 

colHeaders: colHeaders aHeader { createNewHeader($aHeader); } 

dashes: '-'+ 

colData: colData aData { addToData(curCol++, $aData); } 

這是一個高度不完備的答案,但是,沒有人評論說,在過去半小時,我決定分享我的想法。不幸的是我有一段時間沒有解析,所以我不能給出正確的答案。

相關問題