linux shell+vim处理不同数据库文本之间的转换

作者: 张宇,北亚 服务器数据恢复中心,转载请联系作者,如果实在不想联系作者,至少请保留版权,谢谢。
 
还是之前那个XENIX系统,作为某地公安部门的户籍查询与管理系统,记录的是50多万人口的基本信息。这套系统是1989年开发的,当时并未用标准的数据库理念设计(未设计兼容性),只允许查询,打印,或生成输出文本,输出文本的结果大致如下:
 
参考附件示例中的结构,对这些文本文件通过VIM(或VI),再加上SHELL脚本,将其组织成为标准数据库的可录入格式:
先编个脚本,暂起名为m.sh
内容如下:
#从脚本命令行中获取要操作的文件路径
vi $1<<end  >&/dev/null
#替换所有^M换行符(变成LINUX下的标准换行符)
:%s/\r//g
#删除记录之间的表格行
:g/^.─.*/d
#在记录号前面加上分隔符,以求后面处理统一
:%s/记录号:/│记录号:/g
#去掉一条记录中间的断行,这样,一条记录就只占用一行空间
:%s/\n[^$]/│/
#删除第00000号记录,本记录是无用的
:g/记录号: 00000/d
#删除表头统计说明
:g/公 安 人 口 信 息 管 理 系 统/d
#去掉多余的空格与字段分隔符
:%s/\s*││*\s*/│/g
#删除记录前缀,比如“姓名:张三”变成“张三”
:%s/│[^│][^│]*:\s*/│/g
#删除行首与行尾的字段分隔符
:%s/^│\s*//g
:%s/│$//g
:wq
end

 
将上述脚本保存后,在存放导出.TXT文件的路径下执行:
find . -maxdepth 1 -name "*.txt" -exec ./m.sh {} \;
 
完成后所有记录字段均以"│"为分隔符,同时以行为记录单位重新整理。
剩下的工作就简单多了,如果要移植到其他数据库,按文本格式进行处理就行了。
 

你可能感兴趣的:(linux,数据库,shell,vi,vim)