2013-11-26 13 views
0

得到一個很大的文件與大量的XML文件串聯在一起。用awk拆分大文件,用正則表達式語法錯誤

嘗試使用以下命令將它們拆分;

awk '/<\?xml/{g++} { print $0 > "ipg130101-"g".txt"}' ipg130101.xml 

但是不斷收到錯誤;

context is 
/<\?xml/{g++} { print $0 > >>> "ipg130101-"g <<< ".txt"} 
awk: illegal statement at source line 1 

任何幫助非常感謝!

+0

效果很好與GNU Awk 4.1.0,API:1.0(GNU MPFR 3.1.2,GNU MP 5.1.2) –

+0

嗯,估計這是一個Mac OS X的問題?遇到了麻煩csplit可正常工作太 –

回答

3

一種解決方案是明確使用而不是(後者是MAc Os X上的默認值)。

所以最後:

gawk '/<\?xml/{g++} { print $0 > "ipg130101-"g".txt"}' ipg130101.xml 
2

找到了解決辦法,貌似除非你把文件名作爲變量的第一臺Mac不喜歡它。

Splitting a file using AWK on Mac OS X

awk '/<\?xml/{g++} {filename = "ipg130101-"g".txt"; print >filename}' ipg130101.xml 
+0

您也可以用括號括起來('打印>(「...‘G’.TXT」)') – Kevin

+0

這工作,但埃德莫頓的回答解釋了原因。 – ghoti

2

的問題是,這樣的說法:

print $0 > "ipg130101-"g".txt" 

是模糊的。它可以指:

(print $0 > "ipg130101-" g); ".txt" 

(print $0 > "ipg130101-"); g ".txt" 

或任何其它變化。對於便攜性,你必須加上括號輸出重定向右側無論是,即明確寫出:

print $0 > ("ipg130101-"g".txt") 

您不需要$ 0時,順便說一下,這將很好地工作:

print > ("ipg130101-"g".txt") 
+1

補給它,埃德。我想回答的一切,你首先回答,並且更好。 +1。 – ghoti