• linux_coom _ Linux文件比较,文本文件的交集、差集与求差


    交集和差集操作在集合论相关的数学课上经常用到,不过,在Linux下 对文本进行类似的操作在某些情况下也很有用。

    comm命令

    comm命令可以用于两个文件之间的 比较,它有一些选项可以用来调整输出,以便执行交集、求差、以及差集操作。

    • 交集:打印出两个文件所共有的行。
    • 求差:打印出指定文件所包含的且不相同的行。
    • 差集:打印出包含在一个文件中,但不包含在其他指定文件中的行。
    [root@localhost text]# cat aaa.txt 
    aaa
    bbb
    ccc
    ddd
    eee
    111
    222
    [root@localhost text]# cat bbb.txt 
    bbb
    ccc
    aaa
    hhh
    ttt
    jjj
    [root@localhost text]# comm aaa.txt bbb.txt 
    aaa
    bbb
    ccc
    aaa
    ddd
    eee
    111
    222
    hhh
    ttt
    jjj
    第一列 第二列 第三列

    输出的第一列只包含在aaa.txt中出现的行,第二列包含在bbb.txt中出现的行,第 三列包含在aaa.txt和bbb.txt中相同的行。各列是以制表符 ( )作为定界符。

    格式化输出选项:

    • -1:从输出中删除第一列
    • -2:从输出中删除第二列
    • -3:从输出中删除第三列

    交 集

    打印两个文件的交集,需要删除第一列和第二列:

    [root@localhost text]# comm aaa.txt bbb.txt -1 -2
    bbb
    ccc

    求差

    打印出两个文件中不相同的行,需要删除第三列:

    [root@localhost text]# comm aaa.txt bbb.txt -3 | sed 's/^	//'
    aaa
    aaa
    ddd
    eee
    111
    222
    hhh
    ttt
    jjj

    sed 's/^ //' 是将制表符( )删除,以便把两列合并成一列。

    差 集

    通过删除不需要的列,可以得到aaa.txt和bbb.txt的差集:

    aaa.txt的差集

    [root@localhost text]# comm aaa.txt bbb.txt -2 -3
    aaa
    ddd
    eee
    111
    222

    bbb.txt的差集

    [root@localhost text]# comm aaa.txt bbb.txt -1 -3
    aaa
    hhh
    ttt
    jjj
  • 相关阅读:
    1014 Waiting in Line (30)(30 point(s))
    1013 Battle Over Cities (25)(25 point(s))
    1012 The Best Rank (25)(25 point(s))
    1011 World Cup Betting (20)(20 point(s))
    1010 Radix (25)(25 point(s))
    1009 Product of Polynomials (25)(25 point(s))
    1008 Elevator (20)(20 point(s))
    1007 Maximum Subsequence Sum (25)(25 point(s))
    1006 Sign In and Sign Out (25)(25 point(s))
    1005 Spell It Right (20)(20 point(s))
  • 原文地址:https://www.cnblogs.com/cphmvp/p/4355269.html
Copyright © 2020-2023  润新知