awk+uniq實現集合減法運算
有兩個文字A,B, 都為50w左右記錄,A包含B, 求在A中存在,在B中不存在的記錄(要求不能重複)
都有3列,格式如下,各列之間以空格分隔
uin Ftotal Fconsume
------------------------
11588 500 500
12398 2033 1900
13255 1000 1000
14360 1530 1210
對於DBAs 來說,最直接的方式是load to table,假設為tableA,tableB然後用下面sql求出結果集,才匯出到文字中
select distinct t1.*
from tableA t1,tableB t2
where t1.uin not in (select t2.uin);
但請注意,上面兩個文字都約有50w記錄,上述sql會進行 50w*50w*將比較運算才能拿到結果,效率肯定不會好到哪裡去,尤其是在輕量級的mysql等開源資料庫的情況下.
那麼是否有更加巧妙的方法實現呢?
以下是運用awk+uniq的實現
$awk '{print $2" "$3" "$1}' a.txt >a1.txt #為了跳過前兩列進行uniq,將uin移到第三列
$awk '{print $2" "$3" "$1}' b.txt >b1.txt #同上
$cat a1.txt b1.txt |sort -k3n|uniq -f2 -u >result.txt
這裡解釋一下第三句
sort -k3是指從第3列開始排序,n是指以numeric方式排序,而非ascii;
uniq -f2是指跳過前面2列,-u是指取不重複的行
如果b.txt中的某行在a.txt中存在,則會因為 uniq -u排除掉
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/94384/viewspace-600309/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 集合-運算實現
- 如何用位運算實現整數的加減法
- 位運算實現加減乘除
- Verilog實現加減乘除運算
- ORACLE 集合運算Oracle
- JavaScript - 減法運算子JavaScript
- foreach 實現 MyBatis 遍歷集合與批量運算元據MyBatis
- 大數運算—大數加法、減法、乘法、除法詳解
- SDUST OJ 時間類的加、減法賦值運算賦值
- 你真的知道計算機是如何進行減法運算的嗎?計算機
- 從一個加減法運算程式碼理解特殊運算子的過載
- 詳解 SQL 集合運算SQL
- JavaScript加減乘數運算JavaScript
- 高精度減法(C語言實現)C語言
- N位二進位制數加減法運算圖靈機圖靈
- 詳解 Python 的二元算術運算,為什麼說減法只是語法糖?Python
- MongoDB 中的【加減乘除】運算MongoDB
- 位運算與SQL實現SQL
- 四則運算實現 (轉)
- 十六進位制減法計算
- 基於python的集合運算Python
- MySQL第四天——集合運算MySql
- MySQL小白入門04 - 集合運算MySql
- javascript怎麼實現算術加法運算JavaScript
- 大資料的運算加減乘除大資料
- timestamp型別的加減運算型別
- NumPy 簡單算術:加減乘除及其他運算
- sobel運算元,matlab實現Matlab
- 位運算可以實現哪些功能
- Oracle_Day2集合運算Oracle
- 高通濾波法、微分運算元法、神經網路方法實現邊緣檢測神經網路
- 大整數運算C#實現C#
- 三個數字的加減乘除模運算
- 浮點數的加減乘除運算細節
- 二進位制運算加減乘除+快速冪
- 串的基本運算實現-加密解密串加密解密
- 2,javase程式碼實戰-運算子——位運算實現加密解密 (一)Java加密解密
- SQL Server中的集合運算: UNION, EXCEPT和INTERSECTSQLServer