1

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

我想将它们全部转换为一个文件,在 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' 

我认为问题在于尝试使用替换而不是插入,或者它使用了太多内存。

谢谢

4

2 回答 2

2

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

find . -type f -name "*.xml*" -exec awk '{gsub("ID","\nID");printf"%s",$0}' {} +
于 2013-03-04T21:49:50.977 回答
1
  1. 创建您需要处理的所有文件的列表
  2. 将此列表划分为较小的列表,每个列表包括 50 个文件
  3. 创建一个读取子列表并输出中间文件的脚本,同时执行 ID 操作
  4. 创建另一个脚本,一次在 3、20 个进程中执行脚本,根据需要,作为后台进程
  5. 合并输出文件
于 2013-03-04T21:47:36.560 回答