linux基本功系列之uniq命令实战

news2024/9/27 9:19:19

文章目录

  • 前言
  • 一. uniq的命令介绍
  • 二. 语法格式及常用选项
  • 三. 参考案例
    • 3.1 统计行数
    • 3.2 对文本进行去重
    • 3.3 显示不重复的行
    • 3.4 仅显示重复的行,且显示重复的行的所有行
    • 3.5 忽略字母大小写
  • 总结

前言

大家好,又见面了,我是沐风晓月,本文是专栏【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博客
  • 💕 每一个你想要学习的念头,都是未来的你像现在的你求救,不辜负未来,全力奔赴

请添加图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/376138.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【vulhub漏洞复现】CVE-2016-3088 ActiveMQ任意文件写入漏洞

一、漏洞详情影响版本:Apache ActiveMQ 5.x~5.14.0漏洞原理:ActiveMQ中存储文件的fileserver接口支持写入文件,但是没有执行权限。可以通过MOVE文件至其他可执行目录下,从而实现文件写入并访问。ActiveMQ在5.12.x~5.13.x版本中&am…

PowerShell Install Rabbitmq

Rabbitmq 前言 RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代…

设计模式-第4章(装饰模式)

装饰模式装饰模型装饰模式示例商场收银程序(简单工厂策略装饰模式实现)装饰模式总结装饰模型 装饰模式(Decorator),动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为…

【基础算法】双指针----字符串删减

🌹作者:云小逸 📝个人主页:云小逸的主页 📝Github:云小逸的Github 🤟motto:要敢于一个人默默的面对自己,强大自己才是核心。不要等到什么都没有了,才下定决心去做。种一颗树,最好的时间是十年前…

Java查漏补缺(13)泛型概述、使用泛型举例、自定义泛型结构、泛型在继承上的体现、通配符的使用

Java查漏补缺(13)泛型概述、使用泛型举例、自定义泛型结构、泛型在继承上的体现、通配符的使用本章专题与脉络1. 泛型概述1.1 生活中的例子1.2 泛型的引入2. 使用泛型举例2.1 集合中使用泛型2.1.1 举例2.1.2 练习2.2 比较器中使用泛型2.2.1 举例2.2.2 练…

Vue下载安装步骤的详细教程(亲测有效) 2 安装与创建默认项目

上篇请移步到Vue下载安装步骤的详细教程(亲测有效) 1_水w的博客-CSDN博客 上一篇博文已经对Node.js的安装与配置进行了详细介绍。 另外:文中项目存放的路径及项目名称可根据自身实际情况进行更改。 目录 三、Vue安装配置 1、搭建Vue脚手架 2、通过NPM安装Vue …

二手商品交易网站

技术:Java、JSP等摘要:随着科学技术和信息通讯的飞速发展,Internet极大地丰富和改变着我们生活的各个行业。随着Internet的普及应用,人们可以跨越时间和空间的限制,足不出户便能通过网络完成信息交流,而完成…

Windows如何查看某个端口被占用的情况?

在工作中,有时会发现端口被占用的情况,导致软件报错或者服务无法启动等问题。在不知道具体哪个进程占用该端口号的情况下,我们可以用下面方法来查找。 举例:我现在发现8090端口被占用了,我现在需要找到并杀掉该进程。…

ICA简介:独立成分分析

1. 简介 您是否曾经遇到过这样一种情况:您试图分析一个复杂且高度相关的数据集,却对信息量感到不知所措?这就是独立成分分析 (ICA) 的用武之地。ICA 是数据分析领域的一项强大技术,可让您分离和识别多元数据集中的底层独立来源。 …

嵌入式 STM32 红外遥控

目录 红外遥控 NEC码的位定义 硬件设计 软件设计 源码程序 红外遥控 红外遥控是一种无线、非接触控制技术,具有抗干扰能力强,信息传输可靠,功耗低,成本低,容易实现等显著的特点,被诸多电子设备特别…

二进制、十六进制和浮点数ASCII的转换机制--------IEEE754

我在使用GPS时,通过网口接收到了BESTPOS格式的输出结果,它以16进制表示。 当前常见的GPS都以ASCII表示,例如我们在串口助手中可以选择输出类型为ASCII或者是16进制,那么说明它们中见肯定存在某种转换机制,既可以表示出…

javaEE 初阶 — 网络层 IP 协议 的功能 — 路由选择与地址管理

文章目录IP 协议的功能1.IP 协议的路由选择2.IP 协议的地址管理2.1 网络号与主机号的分界2.2 特殊 IPIP 协议的功能 网络层主要做两件事: 地址管理 路由选择 网络层的代表就是 IP 协议 网络层主要是负责管理路由设备,要从两个结点之间找到一条具体的…

01 presto 概述: 特性 优缺点 场景 架构

文章目录1. Presto是什么2. Presto优缺点2.1. 优点2.2. 缺点3. Presto适用场景4. Presto数据模型5. Presto 架构5.1 执行流程关键词:MPP 多源 即席查询 统一SQL执行引擎 分布式SQL引擎 数据分析 1. Presto是什么 Presto是一款开源的分布式并行计算(MPP)引擎&#x…

Hive基础命令

一、Hive其他命令 1、在hive cli命令窗口中如何查看hdfs文件系统 dfs -ls /;2、在hive cli命令窗口中如何查看本地文件系统 !ls /opt;二、Hive数据类型 1、基本数据类型 红标为常用的数据类型; 对于Hive的String类型相当于数据库的varchar类型,该类型…

python之web自动化测试框架

梳理下搭建web自动化框架的流程: 创建目录: cases:存放测试用例,unittest框架要求用例名必须以test开头,所以命名test_case.py test_case.py代码如下:继承unittest.TestCase类下面的方法setupclass(),te…

优思学院|精益生产现场管理的要素是什么?

精益生产的目的是通过消除3M来实现生产过程的优化和精简。3M指的是 "Muda"、"Muri"、"Mura",这三个词来自于日本,代表了生产过程中的浪费、超负荷和不平衡。 因此,要消除3M,优思学院认为企业精益生…

qt-c++进阶1-window、linux下获取本机所有网卡ip信息、根据网卡名获取ip地址。

系列文章目录 例如:第一章 主要是通过qt-c实现获取本机电脑的网卡信息或者是IP信息 文章目录系列文章目录前言一、获取本机网卡IP信息1.1 获取ip地址方法1.2 代码实例总结前言 总结c获取本机网卡信息的方法 第一章:适用于windows操作系统、linux操作系…

中级嵌入式系统设计师2015下半年下午应用技能试题

中级嵌入式系统设计师2015下半年下午试题 试题一 阅读以下关于某嵌入式系统设计的说明,回答下列问题。 [说明] 某公司承接了某嵌入式系统的研制任务。该嵌入式系统由数据处理模块、系统管理模块、FC网络交换模块和智能电源模块组成,系统组成如图1所示。数据处理模块处理系统…

Linux 练习三 (Makefile工程管理器)

文章目录Makefile工程管理器第一个makefile:编写两个.c源文件,并且让一个调用另外一个,使用makefile建立依赖,生成可执行文件,并执行。伪目标变量预定义变量和自动变量通配符和模式匹配内置函数循环指定makefile文件综…

js数组格式字符串处理

文章目录一. 前言二. 数组还原1. 方法一2. 方法二3. 方法三4. 方法四一. 前言 由于数据传输的问题我们常常在请求后拿到数组格式的字符串,一般情况分为以下四种: let str1 ["a","b","c","d"]; // 类型一 let…