实例详细说明linux下去除重复行命令uniq

地址:http://blog.51yip.com/shell/1022.html

一,uniq干什么用的

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

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

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

二,uniq参数说明

 1     [[email protected] ~]$ 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     [[email protected] 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  

四,实例详解

    [[email protected] 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的一个特性,检查重复行的时候,只会检查相邻的行。重复数据,肯定有很多不是相邻在一起的。

    [[email protected] 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  

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

    [[email protected] mytest]$ uniq -d -c uniqtest
     3 this is a test
     2 i love tank  

uniq -d 只显示重复的行

    [[email protected] 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一起使用

    [[email protected] 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 忽略了第一列,检查重复从第二字段开始的。

    [[email protected] 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  

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

    [[email protected] 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 就一样了。

    [[email protected] 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  

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

    [[email protected] 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就一样了。

时间: 2024-12-10 08:27:41

实例详细说明linux下去除重复行命令uniq的相关文章

qt5.2.1在linux下去除最大化和最小化按钮

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 #include <QtGui/QGuiApplication> #include <QDebug> #include <QScreen> #include "qtquick2applicationviewer.h" int main(int argc, char *argv[]) {     QGuiAppl

Linux下vi替换字符命令操作实例

在Linux下的开发中,经常涉及到对文件里的字符进行处理,当中,对字符的替换操作也是非常的频繁. 本文以一个实际的文件为例,具体介绍了Linux下经常使用的vi替换字符命令,为相关的开发工作提供给了參考. 本文中被操作的文件为TestFile.txt,当中的内容例如以下: [email protected]:~/zhouzx/Test> cat TestFile.txt 12345678907890 ABCDABCDEFGHIJ 12345^&*()() 98765432103210 abc

SQL语句技巧之去除重复行

去除表中重复行数据,可能大家立马就想到的是用DISINTCT关键字,但DISINTCT只能是去除表中所有列都相同的行,若碰到需要去除表中多个字段重复的行(即:部份相同,部份不相同),那么该如何做呢?我通过多年数据库编写经验,整理了如下方法,供大家参考和使用. 方法1:适用于返回较少字段 select F1,F2,F3,MAX(F4) FROM TABLENAME GROUP BY F1,F2,F3 方法2:适用于返回行所有字段,需指定不相同的字段 select * FROM TABLENAME

DataTable去除重复行

//抽取dt中的特定列"Region","Cur","Year"组合成新的dat DataTable dat = dt.DefaultView.ToTable(false, new string[]{ "Region","Cur","Year" }); DataView dv = new DataView(w_dt); //虚拟视图吧,我这么认为 //去除dv中的重复行并组合成新的dt2

sublime 去除重复行或者只保留唯一值

去除重复行或者只保留唯一值,分别对应两件事情. 去除重复行,指的是,将text 文档中所有有重复行的行不做保留,全都删除. 只保留唯一值,指的是,将text 文档中有重复行的保留且仅保留一个值,最后就实现整个text中每一行均为唯一值. 这两种方法都是基于正则表达式替换的方法,查找的模式是一样的(利用了正则表达式capture group的方法),区别在于替换目标的内容不同. sublime 去除重复行 首先,点击菜单栏edit -- sort进行排序. 查找内容为: ^(.+)$[\r\n](

linux下如何使用sftp命令【转】

linux下如何使用sftp命令 from:   http://www.cnblogs.com/chen1987lei/archive/2010/11/26/1888391.html sftp 是一个交互式文件传输程式.它类似于 ftp, 但它进行加密传输,比FTP有更高的安全性.下边就简单介绍一下如何远程连接主机,进行文件的上传和下载,以及一些相关操作. 举例,如远程主机的 IP 是 202.206.64.33或者是域名www.hebust.edu.cn,用户名是  fyt ,在命令行模式下:

Linux下查看日志的命令

最近线上的事故有点多,加上公司的监控系统实在是不好用,所以为了抓更多的信息,需要去线上服务器看实时日志.作为一个萌新,居然傻傻的直接用vim打开了jetty的日志文件,近乎10个G的日志文件被vim读入内存,导致服务器的内存被撑爆,系统自动开始kill进程,最后把jetty进程kill掉了,导致了线上故障. 所以有了这篇文章,主要介绍在Linux环境下,可以用来查看日志文件并且不会占用很大内存的一些命令. Introduction 一般来说在Linux下查看文件内容的命令有以下几种: vim.v

Linux下的目录创建命令使用实践

[文章摘要] 本文以实际的C源程序为例子,介绍了Linux下的目录创建命令(mkdir)的使用方法,为相关开发工作的开展提供了有益的参考. [关键词] C语言  Linux  目录创建  makefile  开发 一.mkdir命令简介 mkdir命令用来创建指定名称的目录,其命令格式为:mkdir [选项] 目录... 其中,[选项]可以是"-m"."-p"或"-v".此外,目录名是区分大小写的. 二.本程序流程 本文中的程序用于实现创建目录的

二十七、Linux下常用的shell命令记录

本文章记录我在linux系统下常用或有用的系统级命令,包括软硬件查看.修改命令,有CPU.内存.硬盘.网络.系统管理等命令.但本文不打算介绍生僻命令,也不介绍各个linux发行版下的特有命令,且以后会持续更新. 说明,我是在一个Centos 6.4 64位的虚拟机系统进行测试.本文介绍的命令都会在此Centos下运行验证(也有部分命令会在我的suse/ubuntu系统里测试的,会做特明说明),但运行结果就不再列出了. 硬件篇 CPU相关 lscpu #查看的是cpu的统计信息. cat /pro