- 论坛徽章:
- 0
|
本帖最后由 xylcxyfc 于 2015-07-06 17:36 编辑
数据库中有张表,f1与f2分别是这张表前后两天的数据导出文件,这张表的主键在第一、二个字段。- awk 'BEGIN{FS = ","} NR==FNR{a[$1$2]++} NR>FNR&&!a[$1$2]{if(NF>0) print $0",5"}' f1.txt f2.txt
复制代码 这是一个根据其主键判断有无新增数据并输出的语句,现在的问题是,突然某天,数据库中的数据没有变化,然而数据文件中不知为何主键字段的首尾多了一些空格,体现在主键所在域的首尾多了这些空格,比如说前一天是"5678",后一天的该域就变成了" 5678 "。
这样在上面的awk中,添加主键值到a数组时,数组就不是同一列了,判断的结果就会出错。
那么,在不改变这两个文件内容的前提下,有没方法事先把域中的所有或指定字段trim一下呢(去除首尾空格),并且在去除后,“NR>FNR&&!a[$1$2]”这里a数组中的值是trim后的值呢?
测试结果:sub一次只能指定一个域或者整条记录。如果依次指定域的话,使用sub或者gsub替换空格后,在动作前的条件判断中引用该域的值还是没有trim过的。
f1.txtf2.txt现在因为空格的问题导致输出一条新增数据,正确的结果应该是无输出,也即认为数据没变化。
-------------------------------------------------
去除引号后好像还没效果
|
|