linux下uniq命令去除重复行的例子

一,uniq干什么用的

文本中的重复行,基本上不是我们所要的,所以就要去除掉。linux下有其他命令可以去除重复行,但是我觉得uniq还是比较方便的一个。使用uniq的时候要注意以下二点
1,对文本操作时,它一般会和sort命令进行组合使用,因为uniq 不会检查重复的行,除非它们是相邻的行。如果您想先对输入排序,使用sort -u。
2,对文本操作时,若域中为先空字符(通常包括空格以及制表符),然后非空字符,域中字符前的空字符将被跳过

二,uniq参数说明

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

三,测试文本文件uniqtest

this is a test 
this is a test 
this is a test 
i am tank 
i love tank 
i love tank 
this is a test 
whom have a try 
WhoM have a try 
you  have a try 
i want to abroad 
those are good men 
we are good men 

四,实例详解

[zhangy@BlackGhost mytest]$ uniq -c uniqtest 
 3 this is a test 
 1 i am tank 
 2 i love tank 
 1 this is a test           //和第一行是重复的 
 1 whom have a try 
 1 WhoM have a try 
 1 you  have a try 
 1 i want to abroad 
 1 those are good men 
 1 we are good men 

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

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

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

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

uniq -d 只显示重复的行

[zhangy@BlackGhost mytest]$ uniq -D uniqtest 
this is a test 
this is a test 
this is a test 
i love tank 
i love tank 

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

[zhangy@BlackGhost mytest]$ uniq -f 1 -c uniqtest 
 3 this is a test 
 1 i am tank 
 2 i love tank 
 1 this is a test 
 2 whom have a try 
 1 you  have a try 
 1 i want to abroad 
 2 those are good men   //只有一行,显示二行 
在这里those只有一行,显示的却是重复了,这是因为,-f 1 忽略了第一列,检查重复从第二字段开始的。

[zhangy@BlackGhost mytest]$ uniq -i -c uniqtest 
 3 this is a test 
 1 i am tank 
 2 i love tank 
 1 this is a test 
 2 whom have a try  //一个大写,一个小写 
 1 you  have a try 
 1 i want to abroad 
 1 those are good men 
 1 we are good men 

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

[zhangy@BlackGhost mytest]$ uniq -s 4 -c uniqtest 
3 this is a test 
1 i am tank 
2 i love tank 
1 this is a test 
3 whom have a try   //根上一个例子有什么不同 
1 i want to abroad 
1 those are good men 
1 we are good men 

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

[zhangy@BlackGhost mytest]$ uniq -u uniqtest 
i am tank 
this is a test 
whom have a try 
WhoM have a try 
you  have a try 
i want to abroad 
those are good men 
we are good men 

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

[zhangy@BlackGhost mytest]$ uniq -w 2 -c uniqtest 
 3 this is a test 
 3 i am tank 
 1 this is a test 
 1 whom have a try 
 1 WhoM have a try 
 1 you  have a try 
 1 i want to abroad 
 1 those are good men 
 1 we are good men 
对每行第2个字符以后的内容不作检查,所以i am tank 根 i love tank就一样了。

删除大数据文件中部分字段重复的行

最近写的一个数据采集程序生成了一个含有1千多万行数据的文件,数据由4个字段组成,按照要求需要删除第二个字段重复的行,找来找去linux下也没找到合适的工具,sed/gawk等流处理工具只能针对一行一行处理,并无法找到字段重复的行。看来只好自己python一个程序了,突然想起来利用mysql,于是进行乾坤大挪移:
1. 利用mysqlimport --local dbname data.txt导入数据到表中,表名要与文件名一致
2. 执行下列sql语句(要求唯一的字段为uniqfield)

use dbname;
alter table tablename add rowid int auto_increment not null;
create table t select min(rowid) as rowid from tablename group by uniqfield;
create table t2 select tablename .* from tablename,t where tablename.rowid= t.rowid;</p> <p>drop table tablename;
rename table t2 to tablename;

时间: 2024-08-04 02:23:59

linux下uniq命令去除重复行的例子的相关文章

Linux下ps命令的10个基本例子

  在Linux下ps命令是用于查看系统上运行的进程的最基本的命令之一.它提供了当前进程的同时,如用户ID,CPU使用率,内存使用率,命令名称等,它不显示实时数据,如top或htop命令的详细信息.但是,即使是功能和输出简单,但它仍然是一个必用的过程管理/监控工具,每一个Linux新手应该知道这一点,好好学习.在这篇文章中,我们将使用ps命令以不同的方式来查看进程.筛选和排序它们,以加强基础部分. 语法注意: ps命令带有2种不一样的风格,分别是BSD和UNIX.新用户经常会混淆和错误地解释这两

linux下通过命令行获取gmail的新邮件

  在这篇文章中,我将为你展示 Linux 命令行的另一个漂亮干练的使用案例:访问 Google 的 Gmail 服务,有需要的小伙伴可以参考下. linux下通过命令行获取gmail的新邮件,不需输入@gmail.com部分 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 #!/bin/bash   num="33[1;36m" end="33[0m"   read -p "Enter your mail: " name rea

linux下通过命令行获取gmail的新邮件_linux shell

linux下通过命令行获取gmail的新邮件,不需输入@gmail.com部分 #!/bin/bash num="\033[1;36m" end="\033[0m" read -p "Enter your mail: " name read -p "Enter pass of mail: " pass atom=`wget -qO - https://$name:$pass@mail.google.com/mail/feed/

Linux 下 Make 命令实例详解

  Linux 下 Make 命令实例详解          Linux 下 make 命令是系统管理员和程序员用的最频繁的命令之一.管理员用它通过命令行来编译和安装很多开源的工具,程序员用它来管理他们大型复杂的项目编译问题.本文我们将用一些实例来讨论 make 命令背后的工作机制. Make 如何工作的 对于不知道背后机理的人来说,make 命令像命令行参数一样接收目标.这些目标通常存放在以 "Makefile" 来命名的特殊文件中,同时文件也包含与目标相对应的操作.更多信息,阅读关

Linux下nl命令的用法详解

Linux中nl命令和cat命令很像,不过nl命令会打上行号,属于比较不常用的命令,下面随小编一起来了解下这个鲜为人知的nl命令吧. nl命令在linux系统中用来计算文件中行号.nl 可以将输出的文件内容自动的加上行号!其默认的结果与 cat -n 有点不太一样, nl 可以将行号做比较多的显示设计,包括位数与是否自动补齐 0 等等的功能. 1.命令格式: nl [选项]... [文件]... 2.命令参数: -b :指定行号指定的方式,主要有两种: -b a :表示不论是否为空行,也同样列出

理解Linux下Shell 命令的不同分类及它们的用法

当你打算真正操纵好你的 Linux 系统,没有什么能比命令行界面更让你做到这一点.为了成为一个 Linux 高手,你必须能够理解 Shell 命令的不同类型,并且会在终端下正确的使用它们. 在 Linux 下,命令有几种类型,对于一个 Linux 新手来说,知道不同命令的意思才能够高效和准确的使用它们.因此,在这篇文章里,我们将会遍及各种不同分类的 Linux Shell 命令. 需要注意一件非常重要的事:命令行界面和 Shell 是不同的,命令行界面只是为你提供一个访问 Shell 的方式.而

Linux下chkconfig命令详解(转)

Linux下chkconfig命令详解 chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息.谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接. 使用语法:chkconfig [--add][--del][--list][系统服务] 或 chkconfig [--level <等级代号>][系统服务][on/off/reset] chkconfig在没有参数运行时,显示用法.如果加上服务名,那么就检查这个服务是否在当前运行级启动.如果是,返

Linux下history命令详解---转载

Linux下History命令主要用于显示历史指令记录内容, 下达历史纪录中的指令 . >History命令语法: [www.linuxidc.com@linux]# history [n] [www.linuxidc.com@linux]# history [-c] [www.linuxidc.com@linux]# history [-raw] histfiles 参数: n  :数字,要列出最近的 n 笔命令列表 -c :将目前的shell中的所有 history 内容全部消除 -a :将

Linux 下 SSH 命令实例指南

Linux 下 SSH 命令实例指南 如果你已经在IT圈内混久了, 应该对 SSH 这个了不起的工具及其安全特性有所耳闻吧. 本教程可以让你在短时间内掌握通过 SSH 安全便利地连接到远程计算机的技术. 如果你对 SSH 还没什么概念, 可以先访问 维基百科 进行了解. 基本用法 最简单的 SSH 命令只需要指定用户名和主机名参数即可. 主机名可以是 IP 地址或者域名. 命令格式如下: $ ssh user@hostname 比如要在我的局域网内登录一个树莓派系统, 只需要简单的在命令行输入如