iT邦幫忙

1

在Linux底下有什麼好用的工具可以比對重複資料

  • 分享至 

  • twitterImage

Linux有一段時間沒用了,最近又開始摸,想請教一下,如果有兩個檔案,分別有上萬筆的email,可能有部份重複,想要比對兩個檔案,作出一份唯一值的資料,請問有沒有什麼方法可以快速做到?

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

5
性格妞
iT邦新手 2 級 ‧ 2016-05-05 08:29:21
最佳解答

詳細一點的作法是這樣子的:

$ cat t1
Consectetur.
Sit?
Consectetur!
Sit?
Sit!
$ cat t2
Amet?
Adipisicing!
Ipsum?
Sit.
Amet.
$ wc -l t1 t2
 5 t1
 5 t2
10 總計
$ cat t1 t2 |sort |uniq
Adipisicing!
Amet.
Amet?
Consectetur!
Consectetur.
Ipsum?
Sit!
Sit.
Sit?

更嚴謹作法,都轉成小寫

$ cat t1 t2 |tr '[:upper:]' '[:lower:]' |sort|uniq
adipisicing!
amet.
amet?
consectetur!
consectetur.
ipsum?
sit!
sit.
sit?

若用其他程式語言,ruby為例:

$ irb
>> require 'set'
=> true
>> s = Set.new
=> #<Set: {}>
>> File.readlines("./t1").map(&:chomp).each {|x| s << x}
=> ["Consectetur.", "Sit?", "Consectetur!", "Sit?", "Sit!"]
>> File.readlines("./t2").map(&:chomp).each {|x| s << x}
=> ["Amet?", "Adipisicing!", "Ipsum?", "Sit.", "Amet."]
>> puts s.inspect
#<Set: {"Consectetur.", "Sit?", "Consectetur!", "Sit!", "Amet?", "Adipisicing!", "Ipsum?", "Sit.", "Amet."}>
>> s.map(&:downcase)
=> ["consectetur.", "sit?", "consectetur!", "sit!", "amet?", "adipisicing!", "ipsum?", "sit.", "amet."]

但也要檢查一下檔案裡,
是否有空格或全型空格的問題。

1
slime
iT邦大師 1 級 ‧ 2016-05-05 00:33:40

uniq sort

我要發表回答

立即登入回答