有一个大文件,其中有很多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
任何帮助都非常感谢!!
答案 0 :(得分:3)
一种解决方案是明确使用gawk而不是nawk(后者是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")