Linux系统sort和uniq命令联合使用

前置

给定两个文件 a.txt 和 b.txt ,每行是一个记录(假设没有重复),要求输出两集合的交集、并集、差集,输出的结果只包括唯一项。

交集定义为同时出现在两个文件中的记录项;

并集定义为出现在任何一个文件中的记录项;

差集(A-B)定义为出现在A中而且不出现在B中的记录;

对称差集定义为只出现在一个文件中的记录;

假设 a.txt 包括 a, c, b 三行。假设 b.txt 包括 d, e, c, b 四行。

操作

交集,把两个文件放到一起排序,只输出次数多于一次的项:

$ sort a.txt b.txt | uniq -d

并集,把两个文件放到一起排序,重复的项只算一次:

$ sort a.txt b.txt | uniq

差集(A-B),把B的元素重复2份和A的元素放到一起排序,只输出出现一次的项:

$ sort a.txt b.txt b.txt | uniq -u

对称差,把两个文件放到一起排序,只输出出现一次的项:

$ sort a.txt b.txt | uniq -u

指定分隔符(-t)及基于哪一列(-k)、基于数值(-n) 、逆序(-r)进行排序

sort -t, -k1n:基于逗号分隔出来的第一列数值进行排序

cut -d, -f1 :基于逗号 -d进行分隔并拿到第一列(-f)的数

#排序之后删除了重复行,同时在行首位置输出该行重复的次数:

执行命令:sort testfile | uniq -c ,输出结果如下

    1 friend

    3 hello

    2 world

#仅显示存在重复的行,并在行首显示该行重复的次数:

执行命令:sort testfile | uniq -dc,输出结果如下

    3 hello

    2 world

#仅显示没有重复的行:

执行命令:sort testfile | uniq -u,输出结果如下

friend

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容