想必各位用linux的人都會碰到排重的問題,像檢視乙個日誌檔案,碰到很多重覆記錄,看起來很痛苦。還有像grep一下關鍵字,想找出現關鍵字的檔案,但是出現了一堆重複的檔名,也是一件鬱悶的事情。
下面給大家介紹兩種linux排重的方法,一種是使用uniq命令,一種使用gawk。
uniq排重
uniq的作用是對相鄰重複行進行排重處理,對無序的字元是沒辦法處理,所以需要配合sort一起使用。
下面舉個例子,test.txt 的具體內容如下:
qitai@127:~/tmp$ cat test.txt
aabb
aacc
bb排重可以通過命令:
qitai@127:~/tmp$ cat test.txt | sort | uniq
aabb
cc如果需要獲取每條重覆記錄的出現的次數,可以使用-c選項:
qitai@127:~/tmp$ cat test.txt | sort | uniq -c
2 aa
2 bb
1 cc
gawk排重:
使用gawk排重的話,原理是用乙個陣列的索引來儲存每行記錄,陣列的值可以存放出現次數。
qitai@127:~/tmp$ cat test.txt | gawk '; end '
2 bb
1 cc
2 aa
; 這一行的作用是使用乙個a陣列,他的索引是記錄的第一列,就是這裡的aa、bb、cc。「{}」號前面沒有作用域,對每條記錄都生效。
end 這一行是在遍歷後記錄後,遍歷陣列a,列印結果。
uniq跟gawk都能用來進行排重處理,uniq使用起來應該比較方便,記住uniq跟sort命令就行。但是就效率來說uniq的效率比gawk差多了,因為使用uniq之前要進行排序,最好的情況是n*log(n)複雜度,而使gawk只需要遍歷一遍,也就是n的複雜度。所以這裡跟大家建議,對於小檔案,可以使用sort + uniq進行排重處理,但是對於大檔案,使用gawk會給你節省不少時間。
快速URL排重的方法 一
我這裡介紹乙個極適合大量url快速排重的方法 這個演算法被稱為bloom filter,基本上,它也只適合這樣的場合。這裡的大量是指有5000萬至1億的url,更大的資料量可能也不合適了。所以,把目標鎖定在單機排重,一開始,試驗了perl中的hash,非常簡單的 usedb file my db t...
快速URL排重的方法 一
我這裡介紹乙個極適合大量url快速排重的方法,這個演算法被稱為bloom filter,基本上,它也只適合這樣的場合。這裡的大量是指有5000萬至1億的url,更大的資料量可能也不合適了。所以,把目標鎖定在單機排重,一開始,試驗了perl中的hash,非常簡單的 db file my db tie ...
快速URL排重的方法 二
接上篇,起初我為了輸入輸出方便,是用perl去實現的,後來發現perl中求模速度太慢,就改用c了 常量定義 space指你要分配多大的記憶體空間,我這裡是為5000萬資料的每一條分配4位元組 const intspace 50000000 4 const intmaxnum space 8 defi...