今天有个统计的需求,计算今天比昨天新增加的数据。有两个文件a和b,a是最新文件,b是昨天的文件,需要计算出在a中出现又没出现在b中的数据。
a和b都是这样的文件格式,只有一列id,且无序的
290758 290710 290688 290411 290409 290224 290223 290221 290194
有如下集中实现方式:
1、java,把b读到List中,遍历a中元素判断是否存在b的List中
List b = ..... while(r.ready()){ String s = r.readline(); if(b.contains(s)){ ....... } }
2、python,类似java的做法,不赘述
3、SQL,导入到临时表里用SQL解决
from tablea as a, tableb as b where a.id <> b.id
4、shell
grep -vxFf b a
把b作为规则,取a中不能匹配上b规则的记录。
下面这个最牛:
sort a b b | uniq -u
解释一下:
a b 排序,两个的交集出现次就是2 了,a b b 再排序。b里面的次数,最少是2了,交集里面的是3
然后再uniq -u 取出现一次的,就是想要的结果了