我的任务是将数千个XML文件连接成一个文件。目标是使用Informatica ETL软件加载70,000多个文件更容易加载和维护。
我的XML文件看起来像这样
<insert_list><test_event_insert endTime="2013-07-18T15:56:28" startTime="2013-07-18T07:35:11" operator="X-CLARKS1">.........</test_event_insert></insert_list>
我需要在数据库中加载“test_event_insert”标记之间的所有数据,因此我创建了一个KSH脚本脚本来获取每个XML文件的标记并将数据连接到一个文件中。这是我的剧本:
#!/bin/ksh
#navigate to XML repository
cd $data
#some files have spaces in their names so it takes care of it here
find . -name '* *' | while read file
do
target=`echo "$file" | sed 's/ /_/g'`
echo "Renaming '$file' to '$target'"
mv "$file" "$target"
done
#create MEGA file header
echo -e '<?xml version="1.0" encoding="UTF-8"?>\n<insert_list>\n'>>$data/OUT.XML
#this is where I parse all my XMLs and create one MEGA file
for i in `find . -maxdepth 1 -name "*XML"`
do
sed 's:^<insert_list>\(.*\)</insert_list>$:\1:' "$i" ; echo -e "\n"
done>>$data/OUT.XML
#create MEGA file footer
echo -e '</insert_list>'>>$data/OUT.XML
它适用于2,3个文件。当我用30,000个文件测试它时,脚本似乎陷入了循环,我的输出文件超出了我的文件系统(3GB:小型服务器)。
我在这里做错了什么?我不知道我的剧本中的错误在哪里...任何想法?