V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
338899
V2EX  ›  程序员

请教:没有用找出重复和追加的好方法?

  •  
  •   338899 · 2016-07-30 08:00:13 +08:00 · 3169 次点击
    这是一个创建于 3042 天前的主题,其中的信息可能已经有所发展或是发生改变。
    打个比方: a.txt 是一份手机号码; 1 个月后收到 b.txt 手机号码,但是 b.txt 号可能和 a 有重复。
    需求:把 b.txt 剔除 a 的重复,只保留 a.txt 没有的号码。

    朋友们有没有什么简易的方法呢?

    谢谢了。。。
    36 条回复    2016-07-30 19:19:54 +08:00
    choury
        1
    choury  
       2016-07-30 08:06:04 +08:00 via Android
    sort | uniq
    ferran
        2
    ferran  
       2016-07-30 08:10:43 +08:00 via Android
    先排序,然后双指针查
    Valyrian
        3
    Valyrian  
       2016-07-30 08:14:06 +08:00
    @choury 其实有一个 sort -u...
    SlipStupig
        4
    SlipStupig  
       2016-07-30 08:17:00 +08:00   ❤️ 1
    cat a.txt b.txt | uniq | sort -u
    lcorange
        5
    lcorange  
       2016-07-30 08:42:43 +08:00
    java hashmap
    aeshfawre
        6
    aeshfawre  
       2016-07-30 08:56:22 +08:00
    caixiexin
        8
    caixiexin  
       2016-07-30 09:13:28 +08:00 via Android
    如果是固定格式,比如逗号分隔或一行一个,导入 excel 就能处理了吧?
    zhuangzhuang1988
        9
    zhuangzhuang1988  
       2016-07-30 09:15:15 +08:00
    简单的白名单黑名单问题.
    http://algs4.cs.princeton.edu/30searching/
    到这里找..
    secondwtq
        10
    secondwtq  
       2016-07-30 09:17:45 +08:00
    两位玩 shell 的理解错需求了吧
    是 a 里面是 1 3 5 7 9 , b 里面的是 0 1 2 3 4 5 6 7 8 9
    楼主要的是 0 2 4 6 8

    sort uniq 下来是 0 1 2 3 4 5 6 7 8 9 ...
    338899
        11
    338899  
    OP
       2016-07-30 09:28:11 +08:00
    @aeshfawre
    兄台这个我不太会用啊, windows 下有没有?
    338899
        12
    338899  
    OP
       2016-07-30 09:28:30 +08:00
    @caixiexin 兄台这个我不太会用啊, windows 下有没有?
    chengluyu
        13
    chengluyu  
       2016-07-30 09:35:31 +08:00   ❤️ 1
    comm -23 <(sort a.txt) <(sort b.txt) | uniq
    500miles
        14
    500miles  
       2016-07-30 09:53:51 +08:00
    sort a.txt <(sort -u b.txt) | uniq -u
    500miles
        15
    500miles  
       2016-07-30 09:56:10 +08:00
    @chengluyu comm 更好用一些👍
    aeshfawre
        16
    aeshfawre  
       2016-07-30 10:14:35 +08:00
    看完楼主的回答,楼主应该,命令行,python 都不太熟悉.
    所以楼主需要的是这种玩意:
    ![]( http://i1.piimg.com/4851/dac0443a4780c8fb.png)

    面向非程序员的东西,是收费的.
    qqmishi
        17
    qqmishi  
       2016-07-30 10:30:43 +08:00 via Android
    理论上可以在 excel 里面用 VBA 解决
    zhx1991
        18
    zhx1991  
       2016-07-30 10:34:53 +08:00
    如果不追求效率(看起来确实这样)

    不用在算法上玩花样

    随便找个语言把 a 里的遍历出来一个一个去 b 里看好了
    UnisandK
        19
    UnisandK  
       2016-07-30 10:46:20 +08:00


    Beyond Compare
    cmxz
        20
    cmxz  
       2016-07-30 10:48:30 +08:00 via Android
    @secondwtq cat a.txt b.txt|sort|uniq -d>c.txt
    cat b.txt c.txt|sort|uniq -u
    cmxz
        21
    cmxz  
       2016-07-30 10:50:18 +08:00 via Android
    @338899 win
    下装个 git( https://git-scm.com ) 然后就可以在 git bash 里执行
    skydiver
        22
    skydiver  
       2016-07-30 11:17:02 +08:00 via Android   ❤️ 1
    用不着那么麻烦, sort uniq 基本可以解决大部分问题了。

    取交集 cat a.txt b.txt|sort|uniq -d
    取差集 cat a.txt a.txt.b.txt|sort|uniq


    @cmxz 并不需要两步,一步就出来了~
    zclzhangcl
        23
    zclzhangcl  
       2016-07-30 11:17:18 +08:00
    方法有很多。如果量不大,不是几百万的那种。有 excel 的 vba ,还有楼上有一位兄弟的 beyond compare 。
    不过这个问题为毛我的第一反应是写个程序呢。。。。。
    cmxz
        24
    cmxz  
       2016-07-30 11:21:16 +08:00 via Android
    @skydiver 取差集的话也会有 a.txt 中存在, b.txt 中不存在的内容…
    skydiver
        25
    skydiver  
       2016-07-30 11:22:42 +08:00   ❤️ 1
    @cmxz 你仔细看我的命令,只会出现 b 里有 a 里没有的内容
    cmxz
        26
    cmxz  
       2016-07-30 11:24:32 +08:00 via Android
    @skydiver 居然还可以这样…
    cmxz
        27
    cmxz  
       2016-07-30 11:25:35 +08:00 via Android
    @skydiver 不过后面应该是 uniq -u 吧
    gamexg
        28
    gamexg  
       2016-07-30 11:35:27 +08:00
    @cszhiyue 长见识了,第一次知道 set 之间可以相减。
    skydiver
        29
    skydiver  
       2016-07-30 11:36:10 +08:00
    @cmxz 哈哈,经典技巧, cat 两次

    对的,后面应该是 uniq -u ,写错了
    skydiver
        30
    skydiver  
       2016-07-30 11:36:43 +08:00
    @skydiver 更正:取 b-a 差集: cat a.txt a.txt.b.txt|sort|uniq -u
    xpol
        31
    xpol  
       2016-07-30 11:36:51 +08:00 via Android
    Ruby Array 你值得拥有。
    RockyLee
        32
    RockyLee  
       2016-07-30 13:07:12 +08:00
    Python set
    rrfeng
        33
    rrfeng  
       2016-07-30 13:26:22 +08:00
    明明是 grep 就能完成的事情……

    grep -v -f b.txt a.txt
    rrfeng
        34
    rrfeng  
       2016-07-30 13:26:56 +08:00
    @rrfeng
    a b 可能写反了。
    Arnie97
        35
    Arnie97  
       2016-07-30 17:28:23 +08:00 via Android
    @338899 @cmxz 用不着搬出 Git Bash 这种大家伙, Gow 即可
    Gran1987
        36
    Gran1987  
       2016-07-30 19:19:54 +08:00
    第一反应 Git
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3796 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 10:35 · PVG 18:35 · LAX 02:35 · JFK 05:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.