awk处理案例二十二--求差集

【场景】

表A                                                                 表B
region             name                                      name
重庆                 a                                            a
............                                                        ........
广州                 b                                             z
.............
上海                 d
.............
北京                 a
............
B表为a到z齐全的26个字母;A表的a.name按照region来分组的话,是不齐全的但唯一的。(比如说region=重庆的时候,对应的a.name可能是从a到y一共25行;region=广州的时候,
对应的a.name可能是从b到x23行)我想通过一个sql语句,得到这样2列,第一列为region,第二列为按照region分组后存在于B.name但是不存在于A.name中

 这本来是一个帖子ITPUT

我当时也提供了一条SQL;性能不是很好。已经有完美的答案了;

select distinct * from (select A.region,B.name from A,B)
minus
select * from A where region

随后我补充了awk解决方法

【代码】

awk 'NR==FNR{a[$1,$2]=1;b[$1];next}{for(i in b){if(! a[i,$0])print i,$0}}' A B

 

posted @ 2013-12-06 21:53  lottu  阅读(1225)  评论(0)    收藏  举报