使用awk解析数千个xml文件

时间:2013-03-04 21:38:46

标签: sed awk

我有几千个文件,每个文件只包含一个非常长的行。

我想将它们全部转换为一个文件,每行一个条目在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 个答案:

答案 0 :(得分:2)

我无法使用数千个文件对其进行测试,但是在使用cat处理它们之前,不是将awk所有数据都放入内存中,请尝试使用其中一些文件运行awk时间,如:

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

答案 1 :(得分:1)

  1. 创建需要处理的所有文件的列表
  2. 将此列表分为较小的列表,每个列表包含50个文件
  3. 创建一个读取子列表并输出中间文件的脚本,    做ID事也
  4. 创建另一个脚本,一次执行3个,每个20个进程的脚本,尽可能多地作为后台进程执行
  5. 合并输出文件