查看原文
其他

每天一个 Linux 命令(71): uniq 命令

Linux爱好者 2024-03-09

(给Linux爱好者加星标,提升Linux技能

转自:恋猫大鲤鱼

dablelv.blog.csdn.net/article/details/70175532

1.命令简介

用于去除有序文件中的重复行并将结果输出到标准输出。


为了使uniq 起作用,所有的重复行必须是相邻的,所以 uniq 经常和 sort 合用。


2.命令格式

uniq [OPTION]... [INPUT [OUTPUT]]


3.选项说明

-c, --count 显示行出现的次数-d, --repeated 仅显示重复出现的行,即出现次数 >=2 的行,且只打印一次-D, --all-repeated[=delimit-method] 仅显示重复的行,即出现次数 >=2 的行,且打印重复行的所有行。其中 delimit-method 表示对重复行集合的分隔方式,有三种取值,分别为none、prepend和separate。其中none表示不进行分隔,为默认选项,uniq -D等同于uniq --all-repeated=none;prepend表示在每一个重复行集合前面插入一个空行;separate表示在每个重复行集合间插入一个空行。-f, --skip-fields=N 忽略前N个字段。字段由空白字符(空格符、Tab)分隔。如果您的文档的行被编号,并且您希望比较行中除行号之外的所有内容。如果指定了选项 -f 1,那么下面相邻的两行: 1 这是一条线 2 这是一条线 将被认为是相同的。如果没有指定 -f 1 选项,它们将被认为是不同的-i, --ignore-case 忽略大小写字符的不同-s, --skip-chars=N 跳过前面N个字符不比较-u, --unique 只显示唯一的行,即出现次数等于1的行-w, --check-chars=N 指定每行要比较的前N个字符数--help 显示帮助信息并退出--version 显示版本信息并退出

4.常用示例

先构造一个示例文件 testfile,其内容如下:

helloworldfriendhelloworldhello

(1)对无序文件去重无效。直接删除未经排序的文件,将会发现没有任何行被删除:

uniq testfile helloworldfriendhelloworldhello


(2)uniq 结合 sort 命令,对排序文件去重。

cat testfile | sort | uniqfriendhelloworld

(3)排序之后删除了重复行,同时在行首位置输出该行重复的次数。

#sort testfile | uniq -c1 friend3 hello2 world

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

#sort testfile | uniq -dc3 hello2 world

(5)仅显示不重复的行。

sort testfile | uniq -ufriend


(6)仅显示重复的行,且显示重复行的所有行。

sort testfile | uniq -Dhellohellohelloworldworld


(7)uniq 默认是比较相邻行的所有内容来判断是否重复,我们可以通过选项-w或--check-chars=N指定比较前 N 个字符。比如我们有如下内容的文件 test.txt:

appleapplicationapi

打印前三个字符相同的行:

uniq -w3 -D test.txtappleapplication

给我们公号发送 命令 二字,获取“每天一个Linux命令”系列的完整目录。


- EOF -

推荐阅读  点击标题可跳转

1、每天一个 Linux 命令(70):sed 命令

2、每天一个 Linux 命令(69):rz、sz命令

3、每天一个 Linux 命令(68):alias、unalias 命令


看完本文有收获?请分享给更多人

推荐关注「Linux 爱好者」,提升Linux技能

点赞和在看就是最大的支持❤️

继续滑动看下一个

每天一个 Linux 命令(71): uniq 命令

向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存