linux基本功系列之uniq命令实战
文章目录
前言
大家好,又见面了,我是沐风晓月,本文是专栏【linux基本功-基础命令实战】的第51篇文章。
专栏地址:[linux基本功-基础命令专栏] , 此专栏是沐风晓月对Linux常用命令的汇总,希望能够加深自己的印象,以及帮助到其他的小伙伴😉😉。
如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。
🏠个人主页:我是沐风晓月
🧑个人简介:大家好,我是沐风晓月,双一流院校计算机专业😉😉
💕 座右铭: 先努力成长自己,再帮助更多的人 ,一起加油进步🍺🍺🍺
💕欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信😘
一. uniq的命令介绍
uniq用户重复数据的处理,使用前先用sort进行排序
主要用途有两个:
- 将输入文件(或标准输入)中邻近的重复行写入到输出文件(或标准输出)中。
- 当没有选项时,邻近的重复行将合并为一个。
二. 语法格式及常用选项
依据惯例,我们还是先查看帮助,使用 uniq --help
[root@mufeng ~]# uniq --help
用法:uniq [选项]... [文件]
Filter adjacent matching lines from INPUT (or standard input),
writing to OUTPUT (or standard output).
With no options, matching lines are merged to the first occurrence.
Mandatory arguments to long options are mandatory for short options too.
-c, --count prefix lines by the number of occurrences
-d, --repeated only print duplicate lines, one for each group
-D, --all-repeated[=METHOD] print all duplicate lines
groups can be delimited with an empty line
METHOD={none(default),prepend,separate}
-f, --skip-fields=N avoid comparing the first N fields
--group[=METHOD] show all items, separating groups with an empty line
METHOD={separate(default),prepend,append,both}
-i, --ignore-case ignore differences in case when comparing
-s, --skip-chars=N avoid comparing the first N characters
-u, --unique only print unique lines
-z, --zero-terminated end lines with 0 byte, not newline
-w, --check-chars=N 对每行第N 个字符以后的内容不作对照
--help 显示此帮助信息并退出
--version 显示版本信息并退出
为了更直观一些,我们把常用的参数用表格来展示:
参数 | 描述 |
---|---|
-c, --count | 在每行开头增加重复次数。 |
-d, --repeated | 所有邻近的重复行只被打印一次。 |
-D | 所有邻近的重复行将全部打印。 |
–all-repeated[=METHOD] | 类似于 -D,但允许每组之间以空行分割。METHOD取值范围{none(默认),prepend,separate}。 |
-f, --skip-fields=N | 跳过对前N个列的比较。 |
–group[=METHOD] | 显示所有行,允许每组之间以空行分割。METHOD取值范围:{separate(默认),prepend,append,both}。 |
-i, --ignore-case | 忽略大小写的差异。 |
-s, --skip-chars=N | 跳过对前N个字符的比较。 |
-u, --unique | 只打印非邻近的重复行。 |
-z, --zero-terminated | 设置行终止符为NUL(空),而不是换行符。 |
-w, --check-chars=N | 只对每行前N个字符进行比较。 |
–help | 显示帮助信息并退出。 |
–version | 显示版本信息并退出。 |
这里需要注意一点:
uniq 不会检查重复的行,除非它们是相邻的行。
所以如果想先对输入排序,使用没有uniq 的"sort -u"
三. 参考案例
3.1 统计行数
last默认统计登录系统的用户和IP:
[root@mufeng ~]# last
root pts/2 192.168.1.4 Mon Feb 27 15:22 still logged in
root pts/2 localhost Mon Feb 27 14:59 - 14:59 (00:00)
root pts/2 192.168.1.56 Mon Feb 27 14:59 - 14:59 (00:00)
root pts/1 192.168.1.4 Mon Feb 27 14:51 still logged in
root pts/2 192.168.1.56 Mon Feb 27 14:48 - 14:51 (00:02)
laoxin pts/2 localhost Mon Feb 27 14:44 - 14:45 (00:00)
root pts/2 localhost Mon Feb 27 14:44 - 14:44 (00:00)
root pts/1 192.168.1.4 Mon Feb 27 14:38 - 14:51 (00:13)
root pts/0 :0 Thu Dec 8 20:00 still logged in
root :0 :0 Thu Dec 8 19:47 still logged in
reboot system boot 3.10.0-957.el7.x Thu Dec 8 19:36 - 19:41 (81+00:05)
wtmp begins Thu Dec 8 19:36:35 2022
我们对last的输出进行操作,统计行数:
[root@mufeng ~]# last |awk '{S[$3]++}{for(a in S){print a}}' |sort |uniq -c |sort -rn
13 192.168.1.4
12 localhost
11 192.168.1.56
3.2 对文本进行去重
使用uniq是无法对文件进行去重的,但是会把相邻的去掉:
[root@mufeng ~]# cat a.txt
apple
apple
banana
apple
banana
pear
apple
banana
pear
tiger
[root@mufeng ~]# cat a.txt |uniq
apple
banana
apple
banana
pear
apple
banana
pear
tiger
我们加上 -c参数统计,就发现只有相邻的被统计到一起了
[root@mufeng ~]# cat a.txt
apple
apple
banana
apple
banana
pear
apple
banana
pear
tiger
[root@mufeng ~]# cat a.txt |uniq
apple
banana
apple
banana
pear
apple
banana
pear
tiger
如果想要去重,需要结合sort命令,对文件进行排序后再去重
[root@mufeng ~]# cat a.txt |sort
apple
apple
apple
apple
banana
banana
banana
pear
pear
tiger
我们加上uniq和uniq -c来看效果:
[root@mufeng ~]# cat a.txt |sort |uniq
apple
banana
pear
tiger
[root@mufeng ~]# cat a.txt |sort |uniq -c
4 apple
3 banana
2 pear
1 tiger
可以看到加上-c参数,就统计了所有重复的行数,如果不加-c参数,只是去掉了重复的行,然后源文件不变。
3.3 显示不重复的行
显示不重复的行,我们需要使用 -u参数
[root@mufeng ~]# sort a.txt
apple
apple
apple
apple
banana
banana
banana
pear
pear
tiger
[root@mufeng ~]# sort a.txt |uniq -u
tiger
可以看到,当我们使用 -u参数的时候,最终结果只显示了不重复的行。
3.4 仅显示重复的行,且显示重复的行的所有行
这个和3.3的案例相反,3.3是显示了不重复的行,本题目是要显示所有重复的行,这时候用到 -D参数
[root@mufeng ~]# sort a.txt |uniq -D
apple
apple
apple
apple
banana
banana
banana
pear
pear
3.5 忽略字母大小写
忽略字母大小写使用 -i参数,比如我们在文本中在追加一个大写的APPLE
[root@mufeng ~]# echo APPLE >> a.txt
[root@mufeng ~]# sort a.txt |uniq -iD
apple
apple
apple
apple
APPLE
banana
banana
banana
pear
pear
可以看到大写APPLE也出现在了重复的行里,如果我们不加i默认是没有的:
[root@mufeng ~]# sort a.txt |uniq -c
4 apple
1 APPLE
3 banana
2 pear
1 tiger
[root@mufeng ~]# sort a.txt |uniq -ic
5 apple
3 banana
2 pear
1 tiger
[root@mufeng ~
一旦我们加了i,apple的数量就增加了。
总结
uniq的命令用的场景也比较多,后面我们再一一探讨,沐风晓月!嗨,就到这里,再见吧!
🍻🍻🍻如果你喜欢的话,就不要吝惜你的一键三连了~
- 💕 好啦,这就是今天要分享给大家的全部内容了,我们下期再见!
- 💕 博客主页:mufeng.blog.csdn.net
- 💕 本文由沐风晓月原创,首发于CSDN博客
- 💕 每一个你想要学习的念头,都是未来的你像现在的你求救,不辜负未来,全力奔赴
相关文章
- Linux终端中的命令输入方式(linux在哪里输入命令)
- 如何在Linux中修改终端提示符(linux修改终端提示符)
- VNC安装Linux : 简易步骤实现远程桌面(vnc安装linux)
- Linux下抓包指令教程:快速上手(linux抓包指令)
- 、安全管理Linux日志清理与安全管理(linux清空日志)
- 上的使用使用Linux命令find寻找你想要的文件(find在linux)
- Linux下的邮件客户端指南(linux邮箱客户端)
- 命令Linux下日期设置的简便方法:Date 命令(linux中的date)
- Linux下剪切文件夹的命令操作步骤(linux剪切文件夹命令)
- Linux获取网卡IP地址:步骤指南(linux获取网卡ip)
- 行复习笔记学习Linux:命令行复习笔记(linux创建命令)
- 掌握Linux终端,享受强大功能(linux使用终端)
- Linux C编程实战:XML应用(linuxcxml)
- Linux如何加载动态库路径?(linux加载动态库路径)
- 【Linux重启PHP服务的命令指南】(linux重启php命令)
- 命令妙用Linux:使用LS命令查看文件(linux实现ls)
- 掌握Linux系统修改时间命令吧!(linux修改时间命令)
- Linux下快速部署FTP服务器(linux怎么配置ftp)
- Linux命令mkfs:快速构建文件系统(linux命令mkfs)
- 映射Linux实现端口映射:跨越网络边界(linux允许端口)
- 和安装Linux分支与安装:深入了解(linux的分支)
- Linux发展史:从分支到主干(linux的分支)
- 服务Linux 自动排版:轻松达到最佳格式(linux排版)
- 必须掌握的Linux系统技能(linux要学么)
- 深入理解Linux线程用户:从入门到精通(linux线程用户)
- 掌握 Linux 中的 WC 命令(linux命令wc)
- Linux系统下如何重启防火墙?(linux重启防火墙命令)
- 据库Linux玩转数据库:简单链接实现智能化操作(linux 链接数)
- 使用Atomic Linux轻松玩转Linux服务器(atomic linux)