- 论坛徽章:
- 0
|
问题发生环境:
我们的操作维护系统升级后,原始数据发生变化,但是对应的工具已经没有开发团队继续开发和支持了,而老的工具无法正常导入新的系统配置数据!
根据错误提示确定问题发生的对应的源文件,对此文件200多个字段分析后发现,是由于此文件中有5个字段的值的类型由升级前的整数变为升级后的浮点型,导入工具导入这五个字段的时候提示出错,而不能正常导入,而这个文件恰恰是其中最关键的文件,不能缺少,对这几个字段分析发现,其中的值全为0.00,而且目前网络对此具体值并不敏感,可以直接替换为整数0,本人就在网上搜索相关主题,最后发现可以直接使用awk对这几个字段进行替换.
解决方法如下:
在原始处理数据的shell中增加如下两句
mv BTS.txt BTSorg.txt
$Rep_Tools/gawk -F';' '{OFS=";"}{$165="0";$166="0";$167="0";$168="0";$205="0";print}' BTSorg.txt > BTS.txt
说明:
1.我们的源文件名为BTS.TXT,首先将源文件通过mv命令改名BTSorg.txt.作为处理时的输入文件,也作为原数据予以保留
2.通过第二行的指令对更名后源文件BTSorg.txt中第165,166,167,168,205字段直接替换为0,并使用print输出更新后的整行内容到BTS.txt
处理前后的文件见附件!
处理前的文本文件内容:
BTSorg.zip
(32.47 KB, 下载次数: 28)
处理后的文本文件内容:
BTS.zip
(32.33 KB, 下载次数: 21)
此问题解决了数据不能正常导入的问题,但并非最完美的解决方案,还存在以下问题:
1.因为这个源文件首行是标题行,此命令将标题行对应列的标题也改为了0
2.假如这些列的数据非0,如是8.00,此命令改变了原始值
为了真正掌握相关awk知识,寻求尽可能完美的解决方法,在此将此问题提出,欢迎坛友能给出更好的建议
1.解决在替换时不替换标题行,也就是第一行对应列的内容
2.将这些列不直接赋0,而是将原值转换为整型数付给对应列,尽可能把对原始数据的影响降到最低!
[ 本帖最后由 metaxing 于 2008-12-30 20:20 编辑 ] |
|