• 请不要在回答技术问题时复制粘贴 AI 生成的内容
mantis
V2EX  ›  程序员

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

  •  
  •   mantis · Aug 10, 2022 · 4486 views
    This topic created in 1546 days ago, the information mentioned may be changed or developed.

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


    另
    shell 脚本不就是塞命令进去? 还能编译个二进制不成?
    trn4
    trn4
    Aug 11, 2022
    13
    @PMR #12 把一个二进制 base64 之后用 shell 写入 file system 再运行(

    我真的见过这样的……
    kkeep
    kkeep
    Aug 11, 2022 via Android
    14
    @weiiai 你这个需要 sort
    codingBug
    codingBug
    Aug 11, 2022
    15
    善用[搜索引擎]( 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`
    MilkShake
    MilkShake
    Aug 11, 2022
    16
    上面各个大佬都已经给完整的命令,脚本就是有各种命令组成的,你自己粘贴进去就可以用了。
    masker
    masker
    Aug 11, 2022 via Android❤️13
    17
    伸手党的胜利:大佬已经给出了答案,还嫌大佬不够手把手教
    qooweds
    qooweds
    Aug 11, 2022
    18
    又到了学习 shell 花式技巧的时间啦,期待更多新命令
    knightdf
    knightdf
    Aug 11, 2022
    19
    comm -3 <(sort a.txt) <(sort b.txt)
    cwcc
    cwcc
    Aug 11, 2022
    20
    借个楼问下,如果是那种.patch 的文件,怎么应用到文件上呢?还有.patch 文件是怎么来的
    itechify
    itechify
    Aug 11, 2022 via Android❤️3
    21
    请善用搜索引擎,端饭人前还嚷嚷要喂吗?
    ruanimal
    ruanimal
    Aug 11, 2022
    22
    @cwcc patch some.file xxx.patch
    yolee599
    yolee599
    Aug 11, 2022
    23
    @cwcc #20 善用搜索系统,.patch 文件可以通过 git 生成和应用
    try4times
    try4times
    Aug 11, 2022
    24
    某公司在赛码上的笔试题?
    bmsac0001
    bmsac0001
    Aug 11, 2022 via Android
    25
    为什么不用 diff
    maxbon
    maxbon
    Aug 11, 2022
    26
    先排序再用 diff 呀
    Acoolda
    Acoolda
    Aug 11, 2022
    27
    我推荐大家每日一问,大佬收获指导众生的满足感,我们收获知识。两全其美.
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5358 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 63ms · UTC 02:25 · PVG 10:25 · LAX 18:25 · JFK 21:25
    ♥ Do have faith in what you're doing.