编写一个 shell 脚本,将 2 个文件的差集,输出到一个新文件 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
mantis
V2EX    程序员

编写一个 shell 脚本,将 2 个文件的差集,输出到一个新文件

  •  
  •   mantis 2022-08-10 22:56:56 +08:00 3443 次点击
    这是一个创建于 1158 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如:有如下 2 个文件:

    $ cat a.txt 1111111 2222222 3333333 7777777 9999999 
    $ cat b.txt 1111111 2222222 3333333 4444444 7777777 5555555 6666666 8888888 9999999 

    将 2 个文件的差级输出到文件 c.txt

    $ cat c.txt 4444444 5555555 6666666 8888888 

    请问如何实现?

    27 条回复    2022-08-11 16:40:37 +08:00
    Yang2635
        1
    Yang2635  
       2022-08-10 23:10:19 +08:00 via Android   2
    sort a.txt b.txt | uniq -u
    yinyu
        2
    yinyu  
       2022-08-10 23:10:23 +08:00
    两个都要遍历一遍,然后再对方里面 grep ,然后 wc 看看行数,如果等于零就说对方没有,就写到 c 里面,可能大佬们,有更好的办法吧。
    Yang2635
        3
    Yang2635  
       2022-08-10 23:10:43 +08:00 via Android
    comm -13 a.txt b.txt
    nuk
        4
    nuk  
       2022-08-10 23:10:45 +08:00
    可以用 comm ,但是要求输入是已经排序好的
    Privileges
        5
    Privileges  
       2022-08-10 23:11:20 +08:00
    grep -wvf a.txt b.txt
    id4alex
        6
    id4alex  
       2022-08-10 23:13:05 +08:00   1
    cat a.txt b.txt | sort | uniq > tmp.txt
    grep -vf a.txt tmp.txt > c.txt
    grep -vf b.txt tmp.txt >> c.txt
    weiiai
        7
    weiiai  
       2022-08-10 23:13:53 +08:00   1
    diff -a a.txt b.txt | grep ">" | sed 's/> //'
    mantis
        8
    mantis  
    OP
       2022-08-10 23:14:01 +08:00
    需要输出到一个新文件,需要完整的 shell 脚本,不是简单的命令,谢谢大家。
    id4alex
        9
    id4alex  
       2022-08-10 23:14:21 +08:00
    又从各位老哥这里学习到了 shell 技巧
    Yang2635
        10
    Yang2635  
       2022-08-10 23:15:55 +08:00 via Android
    @mantis 重定向">"一下就行了
    wbd31
        11
    wbd31  
       2022-08-10 23:21:31 +08:00
    diff a.txt b.txt | awk '{if($0~/^[<>]/)print substr($0, 3)}'
    PMR
        12
    PMR  
       2022-08-10 23:24:11 +08:00 via Android
    这问题前几天有人问过



    shell 脚本不就是塞命令进去? 还能编译个二进制不成?
    trn4
        13
    trn4  
       2022-08-11 01:53:19 +08:00
    @PMR #12 把一个二进制 base64 之后用 shell 写入 file system 再运行(

    我真的见过这样的……
    kkeep
        14
    kkeep  
       2022-08-11 01:55:05 +08:00 via Android
    @weiiai 你这个需要 sort
    codingBug
        15
    codingBug  
       2022-08-11 03:19:37 +08:00
    善用[搜索引擎]( https://unix.stackexchange.com/questions/428419/how-to-write-the-difference-between-two-files-into-a-file)

    不知道是不是你要的效果

    `diff a.txt b.txt|grep ">"| cut -c 3- > c.txt`
    aaa5838769
        16
    aaa5838769  
       2022-08-11 08:00:57 +08:00
    上面各个大佬都已经给完整的命令,脚本就是有各种命令组成的,你自己粘贴进去就可以用了。
    masker
        17
    masker  
       2022-08-11 09:03:50 +08:00 via Android   13
    伸手党的胜利:大佬已经给出了答案,还嫌大佬不够手把手教
    qooweds
        18
    qooweds  
       2022-08-11 09:06:37 +08:00
    又到了学习 shell 花式技巧的时间啦,期待更多新命令
    knightdf
        19
    knightdf  
       2022-08-11 09:26:30 +08:00
    comm -3 <(sort a.txt) <(sort b.txt)
    cwcc
        20
    cwcc  
       2022-08-11 09:33:30 +08:00
    借个楼问下,如果是那种.patch 的文件,怎么应用到文件上呢?还有.patch 文件是怎么来的
    itechify
        21
    itechify  
    PRO
       2022-08-11 09:53:36 +08:00 via Android   3
    请善用搜索引擎,端饭人前还嚷嚷要喂吗?
    ruanimal
        22
    ruanimal  
       2022-08-11 11:51:15 +08:00
    @cwcc patch some.file xxx.patch
    yolee599
        23
    yolee599  
       2022-08-11 12:04:51 +08:00
    @cwcc #20 善用搜索系统,.patch 文件可以通过 git 生成和应用
    try4times
        24
    try4times  
       2022-08-11 13:05:21 +08:00
    某公司在赛码上的笔试题?
    bmsac0001
        25
    bmsac0001  
       2022-08-11 13:18:13 +08:00 via Android
    为什么不用 diff
    maxbon
        26
    maxbon  
       2022-08-11 15:30:53 +08:00
    先排序再用 diff 呀
    Acoolda
        27
    Acoolda  
       2022-08-11 16:40:37 +08:00
    我推荐大家每日一问,大佬收获指导众生的满足感,我们收获知识。两全其美.
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3273 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 36ms UTC 00:05 PVG 08:05 LAX 17:05 JFK 20:05
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86