2013-03-04 96 views
1

我有幾千個文件,每個文件只包含一個非常長的行。用awk解析數千個xml文件

我想將它們全部轉換爲一個文件,每行一個條目在ID字段處分開,我有幾個文件,但是它在數百個文件上花費太長時間,似乎在數千個文件上崩潰。尋找一種無限快捷的方式。

(find -type f -name '*.xml' -exec cat {} \;) | awk '{gsub("ID","\nID");printf"%s",$0}' 

我也試過這種..

(find -type f -name '*.xml' -exec cat {} \;) | sed 's/ID/\nID/g' 

我認爲這個問題是嘗試使用,而不是插入更換或它佔用了太多的內存。

感謝

回答

2

我不能與文件的一千測試,但與awk處理它們,而不是cat所有數據到內存中之前,儘量在同一時間運行awk用那些文件,像:

find . -type f -name "*.xml*" -exec awk '{gsub("ID","\nID");printf"%s",$0}' {} + 
+1

謝謝你們。我的管道現在流經了。我覺得我已經解開了宇宙的祕密。 – 2013-03-04 22:10:47

1
  1. 創建你需要處理
  2. 鴻溝這個名單成更小的名單各包括50個文件
  3. 創建一個腳本讀取子列表和輸出中間的所有文件的列表文件, 做ID的事也
  4. 創建另一個腳本,在一次3,20過程執行腳本,儘可能多的,作爲後臺進程
  5. 合併輸出文件