使用awk拆分大文件,使用正则表达式进行语法错误

时间:2013-11-26 19:11:35

标签: unix awk

有一个大文件,其中有很多xml doc连接在一起。

尝试使用以下命令拆分它们;

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

任何帮助都非常感谢!!

3 个答案:

答案 0 :(得分:3)

一种解决方案是明确使用而不是(后者是MAc Os X上的默认值)。

最后:

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

答案 1 :(得分:2)

找到一个解决方案,看起来像mac不喜欢它,除非你先把文件名作为变量。

Splitting a file using AWK on Mac OS X

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

答案 2 :(得分: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")