还是之前那个XENIX系统,作为某地公安部门的户籍查询与管理系统,记录的是50多万人口的基本信息。这套系统是1989年开发的,当时并未用标准的数据库理念设计(未设计兼容性),只允许查询,打印,或生成输出文本,输出文本的结果大致如下:
参考附件示例中的结构,对这些文本文件通过VIM(或VI),再加上SHELL脚本,将其组织成为标准数据库的可录入格式:
先编个脚本,暂起名为m.sh
内容如下:
#从脚本命令行中获取要操作的文件路径
vi $1<<end >&/dev/null
#替换所有^M换行符(变成LINUX下的标准换行符)
:%s/\r//g
:%s/\r//g
#删除记录之间的表格行
:g/^.─.*/d
:g/^.─.*/d
#在记录号前面加上分隔符,以求后面处理统一
:%s/记录号:/│记录号:/g
:%s/记录号:/│记录号:/g
#去掉一条记录中间的断行,这样,一条记录就只占用一行空间
:%s/\n[^$]/│/
#删除第00000号记录,本记录是无用的
:g/记录号: 00000/d
:g/记录号: 00000/d
#删除表头统计说明
:g/公 安 人 口 信 息 管 理 系 统/d
:g/公 安 人 口 信 息 管 理 系 统/d
#去掉多余的空格与字段分隔符
:%s/\s*││*\s*/│/g
:%s/\s*││*\s*/│/g
#删除记录前缀,比如“姓名:张三”变成“张三”
:%s/│[^│][^│]*:\s*/│/g
:%s/│[^│][^│]*:\s*/│/g
#删除行首与行尾的字段分隔符
:%s/^│\s*//g
:%s/│$//g
:wq
end
:%s/^│\s*//g
:%s/│$//g
:wq
end
将上述脚本保存后,在存放导出.TXT文件的路径下执行:
find . -maxdepth 1 -name "*.txt" -exec ./m.sh {} \;
完成后所有记录字段均以"│"为分隔符,同时以行为记录单位重新整理。
剩下的工作就简单多了,如果要移植到其他数据库,按文本格式进行处理就行了。
本文转自 张宇 51CTO博客,原文链接:http://blog.51cto.com/zhangyu/163433,如需转载请自行联系原作者