当前位置:首页 » 《我的小黑屋》 » 正文

Linux uniq命令教程:去重和计数的小能手(附实例详解和注意事项)

3 人参与  2024年04月04日 16:45  分类 : 《我的小黑屋》  评论

点击全文阅读


Linux uniq命令介绍

uniq命令,即unique,主要用于在文本文件中找出或者删除重复出现的行,一般和sort命令结合使用。uniq命令不仅可以将文件中的重复行进行删除,还可以对重复的行进行计数,或者只显示重复的行等。

Linux uniq命令适用的Linux版本

uniq命令在众多Linux发行版中都有应用,包括但不限于Ubuntu, Debian, Fedora, CentOS等。如在一些Linux版本中没有预装uniq命令,可以使用以下命令进行安装:

对于使用apt的系统 (如 Debian 或 Ubuntu):

[linux@bashcommandnotfound.cn ~]$ sudo apt-get install uniq

对于使用yum的系统 (如 CentOS 7):

[linux@bashcommandnotfound.cn ~]$ sudo yum install uniq

对于使用dnf的系统(如Centos 8):

[linux@bashcommandnotfound.cn ~]$ sudo dnf install uniq

Linux uniq命令的基本语法

命令格式如下

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

Linux uniq命令的常用选项或参数说明

选项说明
-c在每行前面加上此行在文件中出现的次数。
-d只显示重复行。
-D显示所有重复行。
-f忽略前N个字段。
-s忽略前N个字符。
–help显示帮助信息。
–version显示版本信息。

Linux uniq命令实例详解

以下实例帮助理解如何使用uniq命令。

实例1:使用uniq命令删除文本文件中的重复行

[linux@bashcommandnotfound.cn ~]$ sort file.txt | uniq

实例2:使用uniq命令统计每行在文件中出现的次数

[linux@bashcommandnotfound.cn ~]$ sort file.txt | uniq -c

实例3:使用uniq命令只显示重复过的行

[linux@bashcommandnotfound.cn ~]$ sort file.txt | uniq -d

实例4:查看日志文件中出现频率最高的10个IP

[linux@bashcommandnotfound.cn ~]$ awk '{print $1}' access.log | sort | uniq -c | sort -rn | head

这个命令首先使用awk命令提取出日志文件中的IP地址,然后排序和去重,最后列出频率最高的10个IP。

实例5:在uniq操作中跳过前N个字符

开发在进行某些操作时,可能希望从行的中间部分开始去重,这时可以使用-s选项来跳过行开头的字符。

[linux@bashcommandnotfound.cn ~]$ uniq -s N filename

我们需要将N替换为你想要跳过的字符数。

实例6:在uniq操作中跳过前N个字段

与-s选项类似,-f选项也可以让uniq命令跳过特定数量的字段。

[linux@bashcommandnotfound.cn ~]$ uniq -f N filename

我们需要将N替换为你想要跳过的字段数。

实例7:显示所有重复行

如果你想查看文本文件中的所有重复行,可以使用-D选项。

[linux@bashcommandnotfound.cn ~]$ uniq -D filename

这样可以显示文件中的所有重复行。

实例8:使用uniq命令制作字典文件

使用uniq命令可以帮助我们从一大段文本中提取出所有的单词,并制作成字典文件。

[linux@bashcommandnotfound.cn ~]$ cat file.txt | tr -c '[:alnum:]' '[\n*]' | sort | uniq > dictionary.txt

在这个实例中,我们使用tr命令将所有不是字母和数字的字符都替换成了换行符,这样就将所有的单词都分割开了。然后使用sort和uniq对这些单词进行排序和去重,最后保存到dictionary.txt文件中。

实例9: 精确控制uniq选择行

uniq -z选项可以使uniq将输出项以NULL字符结束,而不是换行符。

[linux@bashcommandnotfound.cn ~]$ sort file.txt | uniq -z

这将把所有独立的行压缩成一个长的输出行,并使用空格替换输入行中的新行字符。

实例10: 不进行排序的情况下合并文件

有时我们需要合并文件,但不能排序(例如日志文件),可以使用下面的命令:

[linux@bashcommandnotfound.cn ~]$ awk '!a[$0]++' unsorted-file.txt

awk的关联数组a在这里用于记录每个行已经报告的次数。当a[$0]的值为1时,新行就不会打印。

实例11: uniq -u选项输出唯一的行

默认情况下,uniq从输入中删除重复的行。-u选项告诉uniq只显示那些在输入中唯一出现的行。

[linux@bashcommandnotfound.cn ~]$ sort file.txt | uniq -u

这将只显示文件中出现一次的行。

实例12: 移除文件中重复的单词

我们可以使用uniq命令从名称列表中删除重复的名字。

[linux@bashcommandnotfound.cn ~]$ echo "google ibm google microsoft ibm apple" | tr ' ' '\n' | sort | uniq

这个例子中,我们首先使用echo输出一串文字,然后用tr命令将空格替换为换行符,之后排序并使用uniq删除重复项。

Linux uniq命令的注意事项

uniq命令只能检测相邻的重复行,所以一般我们在使用uniq之前会使用sort命令先对文件进行排序。若执行时出现bash: uniq: command not found,可按照上面的方法进行安装

Linux uniq相关命令

sort命令:排序或对文件进行归并

cat命令:用于显示文件的全部内容

tail命令:在屏幕上显示指定文件的尾部若干行

grep命令:使用正则表达式进行模式匹配,是一种强大的文本搜索工具。

awk命令:一种处理数据的编程语言,在处理文本和数据上相当强大。

sed命令:主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。

cut命令:Linux下的一个截取字符串的命令。

wc命令:用于统计指定文件中的字节数、字数、行数。

head命令:用于显示文件的开头部分内容。

find命令:用来在指定目录下查找文件。

tr命令:用于删除一段文本信息中的字符,或者进行字符转换。


点击全文阅读


本文链接:http://zhangshiyu.com/post/90547.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1