linux 去除重复行 uniq

2024-04-25 09:08
文章标签 linux 重复 去除 uniq

本文主要是介绍linux 去除重复行 uniq,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

uniq干什么用的

文本中的重复行,基本上不是我们所要的,所以就要去除掉。linux下有其他命令可以去除重复行,但是我觉得uniq还是比较方便的一个。使用uniq的时候要注意以下二点

1,对文本操作时,它一般会和sort命令进行组合使用,因为uniq 不会检查重复的行,除非它们是相邻的行。如果您想先对输入排序,使用sort -u。

2,对文本操作时,若域中为先空字符(通常包括空格以及制表符),然后非空字符,域中字符前的空字符将被跳过

二,uniq参数说明

查看复制打印?
  1. [zhangy@BlackGhost ~]$ uniq --help  
  2. 用法:uniq [选项]... [文件]  
  3. 从输入文件或者标准输入中筛选相邻的匹配行并写入到输出文件或标准输出。  
  4.   
  5. 不附加任何选项时匹配行将在首次出现处被合并。  
  6.   
  7. 长选项必须使用的参数对于短选项时也是必需使用的。  
  8.  -c, --count              //在每行前加上表示相应行目出现次数的前缀编号  
  9.  -d, --repeated          //只输出重复的行  
  10.  -D, --all-repeated      //只输出重复的行,不过有几行输出几行  
  11.  -f, --skip-fields=N     //-f 忽略的段数,-f 1 忽略第一段  
  12.  -i, --ignore-case       //不区分大小写  
  13.  -s, --skip-chars=N      //根-f有点像,不过-s是忽略,后面多少个字符 -s 5就忽略后面5个字符  
  14.  -u, --unique            //去除重复的后,全部显示出来,根mysql的distinct功能上有点像  
  15.  -z, --zero-terminated   end lines with 0 byte, not newline  
  16.  -w, --check-chars=N      //对每行第N 个字符以后的内容不作对照  
  17.  --help              //显示此帮助信息并退出  
  18.  --version              //显示版本信息并退出  

其中-z不知道有什么用

三,测试文本文件uniqtest

  1. this is a test  
  2. this is a test  
  3. this is a test  
  4. i am tank  
  5. i love tank  
  6. i love tank  
  7. this is a test  
  8. whom have a try  
  9. WhoM have a try  
  10. you  have a try  
  11. i want to abroad  
  12. those are good men  
  13. we are good men  

四,实例详解

查看复制打印?
  1. [zhangy@BlackGhost mytest]$ uniq -c uniqtest  
  2.  3 this is a test  
  3.  1 i am tank  
  4.  2 i love tank  
  5.  1 this is a test           //和第一行是重复的  
  6.  1 whom have a try  
  7.  1 WhoM have a try  
  8.  1 you  have a try  
  9.  1 i want to abroad  
  10.  1 those are good men  
  11.  1 we are good men  

从上例子中我们可以看出,uniq的一个特性,检查重复行的时候,只会检查相邻的行。重复数据,肯定有很多不是相邻在一起的。

  1. [zhangy@BlackGhost mytest]$ sort uniqtest |uniq -c  
  2.  1 WhoM have a try  
  3.  1 i am tank  
  4.  2 i love tank  
  5.  1 i want to abroad  
  6.  4 this is a test  
  7.  1 those are good men  
  8.  1 we are good men  
  9.  1 whom have a try  
  10.  1 you  have a try  

这样就可以解决上个例子中提到的问题

  1. [zhangy@BlackGhost mytest]$ uniq -d -c uniqtest  
  2.  3 this is a test  
  3.  2 i love tank  

uniq -d 只显示重复的行

  1. [zhangy@BlackGhost mytest]$ uniq -D uniqtest  
  2. this is a test  
  3. this is a test  
  4. this is a test  
  5. i love tank  
  6. i love tank  

uniq -D 只显示重复的行,并且把重复几行都显示出来。他不能和-c一起使用

查看复制打印?
  1. [zhangy@BlackGhost mytest]$ uniq -f 1 -c uniqtest  
  2.  3 this is a test  
  3.  1 i am tank  
  4.  2 i love tank  
  5.  1 this is a test  
  6.  2 whom have a try  
  7.  1 you  have a try  
  8.  1 i want to abroad  
  9.  2 those are good men   //只有一行,显示二行  

在这里those只有一行,显示的却是重复了,这是因为,-f 1 忽略了第一列,检查重复从第二字段开始的。

查看复制打印?
  1. [zhangy@BlackGhost mytest]$ uniq -i -c uniqtest  
  2.  3 this is a test  
  3.  1 i am tank  
  4.  2 i love tank  
  5.  1 this is a test  
  6.  2 whom have a try  //一个大写,一个小写  
  7.  1 you  have a try  
  8.  1 i want to abroad  
  9.  1 those are good men  
  10.  1 we are good men  

检查的时候,不区分大小写

查看复制打印?
  1. [zhangy@BlackGhost mytest]$ uniq -s 4 -c uniqtest  
  2. 3 this is a test  
  3. 1 i am tank  
  4. 2 i love tank  
  5. 1 this is a test  
  6. 3 whom have a try   //根上一个例子有什么不同  
  7. 1 i want to abroad  
  8. 1 those are good men  
  9. 1 we are good men  

检查的时候,不考虑前4个字符,这样whom have a try 就和 you have a try 就一样了。

  1. [zhangy@BlackGhost mytest]$ uniq -u uniqtest  
  2. i am tank  
  3. this is a test  
  4. whom have a try  
  5. WhoM have a try  
  6. you  have a try  
  7. i want to abroad  
  8. those are good men  
  9. we are good men  

去重复的项,然后全部显示出来

  1. [zhangy@BlackGhost mytest]$ uniq -w 2 -c uniqtest  
  2.  3 this is a test  
  3.  3 i am tank  
  4.  1 this is a test  
  5.  1 whom have a try  
  6.  1 WhoM have a try  
  7.  1 you  have a try  
  8.  1 i want to abroad  
  9.  1 those are good men  
  10.  1 we are good men  

对每行第2个字符以后的内容不作检查,所以i am tank 根 i love tank就一样了。

这篇关于linux 去除重复行 uniq的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/934249

相关文章

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

poj2406(连续重复子串)

题意:判断串s是不是str^n,求str的最大长度。 解题思路:kmp可解,后缀数组的倍增算法超时。next[i]表示在第i位匹配失败后,自动跳转到next[i],所以1到next[n]这个串 等于 n-next[n]+1到n这个串。 代码如下; #include<iostream>#include<algorithm>#include<stdio.h>#include<math.

poj3261(可重复k次的最长子串)

题意:可重复k次的最长子串 解题思路:求所有区间[x,x+k-1]中的最小值的最大值。求sa时间复杂度Nlog(N),求最值时间复杂度N*N,但实际复杂度很低。题目数据也比较水,不然估计过不了。 代码入下: #include<iostream>#include<algorithm>#include<stdio.h>#include<math.h>#include<cstring

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

Linux服务器Java启动脚本

Linux服务器Java启动脚本 1、初版2、优化版本3、常用脚本仓库 本文章介绍了如何在Linux服务器上执行Java并启动jar包, 通常我们会使用nohup直接启动,但是还是需要手动停止然后再次启动, 那如何更优雅的在服务器上启动jar包呢,让我们一起探讨一下吧。 1、初版 第一个版本是常用的做法,直接使用nohup后台启动jar包, 并将日志输出到当前文件夹n

[Linux]:进程(下)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:Linux学习 贝蒂的主页:Betty’s blog 1. 进程终止 1.1 进程退出的场景 进程退出只有以下三种情况: 代码运行完毕,结果正确。代码运行完毕,结果不正确。代码异常终止(进程崩溃)。 1.2 进程退出码 在编程中,我们通常认为main函数是代码的入口,但实际上它只是用户级