[转]求文件差集 shellgrep
程序员文章站
2022-07-04 17:34:26
...
今天有个统计的需求,计算今天比昨天新增加的数据。有两个文件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 取出现一次的,就是想要的结果了