Linux常用基本命令:uniq-去重复【分分快三全天计划

作者:电脑系统

uniq命令

作用:输出或者忽略文件中的重复行

格式: uniq [option] [file|stdin]

ghostwu@dev:~/linux/uniq$ cat ghostwu.txt 
192.168.1.2
192.168.1.8
192.168.1.3
192.168.1.3
192.168.1.9
192.168.1.8
192.168.1.8
192.168.1.0
192.168.1.3
ghostwu@dev:~/linux/uniq$ uniq ghostwu.txt 
192.168.1.2
192.168.1.8
192.168.1.3
192.168.1.9
192.168.1.8
192.168.1.0
192.168.1.3

去掉了连续的重复行.如果只想保留文件中的唯一,可以用选项-u

ghostwu@dev:~/linux/uniq$ uniq -u ghostwu.txt 
192.168.1.2
192.168.1.8
192.168.1.9
192.168.1.0
192.168.1.3

-c:去重复,并计算每行出现的次数

ghostwu@dev:~/linux/uniq$ uniq -c ghostwu.txt 
      1 192.168.1.2
      1 192.168.1.8
      2 192.168.1.3
      1 192.168.1.9
      2 192.168.1.8
      1 192.168.1.0
      1 192.168.1.3
ghostwu@dev:~/linux/uniq$ cat -n ghostwu.txt 
     1    192.168.1.2
     2    192.168.1.8
     3    192.168.1.3
     4    192.168.1.3
     5    192.168.1.9
     6    192.168.1.8
     7    192.168.1.8
     8    192.168.1.0
     9    192.168.1.3

可以用sort命令排序后,再去重复,得到的结果 也是唯一的

ghostwu@dev:~/linux/uniq$ sort -n ghostwu.txt | uniq -c
      1 192.168.1.0
      1 192.168.1.2
      3 192.168.1.3
      3 192.168.1.8
      1 192.168.1.9

-d: 只显示重复的行

ghostwu@dev:~/linux/uniq$ uniq -d ghostwu.txt 
192.168.1.3
192.168.1.8

 

  >0 发生错误。

采购部出现系统备份故障

  如果执行成功,uniq 命令退出,返回值 0。否则,命令退出返回值大于 0。

这是一个系统备份程序出现故障时的提示信息。为了便于管理,系统工程师往往先将一个星期或者半个月的错误记录合并在同一个文件中。然后再把重复的记录去除掉,就可以发现哪些部分的备份出了问题。如果不去掉重复行的话,那么一个个核对过去就会很麻烦。看着一长串错误列表(其实很多都是重复的),也不知道该如何下手。另外统计重复行出现的次数(每个部分系统备份故障程序的次数)也可以帮助系统工程师判断这个错误是不是偶然性的。为此,现在系统工程师主要想实现三个功能。第一是能够统计这个文件中错误信息重复的次数;第二是能够知道哪些故障信息出现了一次以上;第三就是得到一个去除了重复行的文件,以方便工程师分析问题原因并最终解决问题。这三个功能的话利用uniq命令都可以轻松解决。不过需要注意的是,在使用这个去除重复行的命令之前,必须要先对这个记录文件进行排序。其实这个原理跟数据库中的distinct去除重复行的关键字工作原理是类似的。在数据库中采用这个关键字去除重复记录时,数据库会自动对相关的记录进行排序,然后再去除重复行。而现在这个uniq命令自身没有排序的功能。这也是Unix操作系统的一个特点,即每个命令只完成单一的功能。而这个去除重复行的uniq命令对于那些没有经过排序的命令是不起任何作用的。如上面这个日志文件,如果文件中的记录没有排序,那么这个uniq命令就无法去除这个重复的记录或者统计重复记录出现的次数。为此系统工程师要做的第一步,就是对这个文件排序。如可以使用sort log.txt>log1.txt命令,将这个日志文件中的记录进行排序并将排序后的结果保存到一个文件中。

  0 命令运行成功。

销售部出现系统备份故障

  则在您运行uniq 命令后 newfruit 文件将包含下列行:

如现在系统工程师将两个文件合并后,产生如下一个文件log.txt。

  apples

第一步:先对文件中的记录进行排序。

  cherries

财务部出现系统备份故障

  退出状态

...

  要删除名为 fruit 文件中的重复行并将其保存到一个名为 newfruit 的文件中,输入:

在数据库中,如果表中记录有重复的话,则只需要通过distinct关键字就可以达到去除重复行的目的。那么在Unix操作系统中,是否也有便利的工具能够实现这个需求呢?答案当然是肯定的。为了实现这个需求,我们需要用到sort排序命令和uniq去除重复行命令。

  uniq 命令删除文件中的重复行。 uniq 命令读取由 InFile 参数指定的标准输入或文件。该命令首先比较相邻的行,然后除去第二行和该行的后续副本。重复的行一定相邻。(在发出 uniq 命令之前,请使用 sort 命令使所有重复行相邻。)最后,uniq 命令将最终单独的行写入标准输出或由 OutFile 参数指定的文件。InFile 和 OutFile 参数必须指定不同的文件。

第二步:利用uniq命令去除重复的行。

   Characters 忽略由 Characters 变量指定的字符的数目。如果同时指定 - Fields 和 Characters 标志, uniq 命令忽略由 Characters 标志指定的字符数目,并从由 -Fields 标志指定的字段后开始。 这个标志和 -s Characters 标志是等价的。

当某个文件排序完成之后,就可以使用这个uniq命令来去除重复的行了。如使用uniq log1.txt(注意这里使用的是排序后的文件),系统工程师就可以得到如下的结果:

  cherries

从这个结果中可以看出,系统由四条记录变为了三条,取出了一条重复行的记录。也就是说,这个uniq命令会读取文件中每一行的内容写入到标准输出。如果在读取行的时候,遇到多行重复内容的话,则只输出其中的一行。通过这个工作记录,就可以实现去除重复行的目的。需要注意的是,有时候系统工程师想要将这个处理的结果保存到一个文件中。这个跟其他命令的处理方式不一样。如像ps等命令,想将命令的执行结果保存到一个文件中,则需要采用重定向符号>。但是这个uniq命令则不同。因为这个命令本省就可以带两个文件名作为参数。如uniq 原文件 目标文件。注意这个格式并不是说让操作系统分别对原文件与目标文件都进行去除重复行的动作。而是对原文件进行去除重复行的操作,然后将执行的结果保存到目标文件中。也就是说,此时uniq命令只是对原文件进行处理,并不会对目标文件进行任何去除重复行的操作。换一句话说,uniq命令一次只能够对一个文件进行去除重复行的操作。另外就是需要注意的是,将执行的结果保存到一个文件中不需要用到重定向符号。

  apples

财务部出现系统备份故障

  peaches

采购部出现系统备份故障

  uniq 命令

销售部出现系统备份故障

  -f Fields 忽略由 Fields 变量指定的字段数目。如果 Fields 变量的值超过输入行中的字段数目, uniq 命令用空字符串进行比较。这个标志和 -Fields 标志是等价的。

众所周知,在Unix系统维护中,系统工程师经常需要把多个文件合并成一个文件。此时就会遇到一个问题,即将多个文件连接或者合并在一起的时候,可能会产生重复的记录。这是系统工程师不希望看到的。那么该如何消除这些重复的记录呢?熟悉排序命令的读者,一定知道利用sort排序命中一个-u 可选项可以达到删除重复行的目的。但是这个功能并不是很强。如不能够帮助系统工程师找出哪些行是重复的或者统计重复行出现的次数等等。要实现这些复杂的功能,就需要借助于这个uniq去除重复行命令了。

  文件

销售部出现系统备份故障

  uniq是LINUX命令

  描述

  文字

  uniq [ -c | -d | -u ] [ -f Fields ] [ -s Characters ] [ -Fields ] [ Characters ] [ InFile [ OutFile ] ]

  该命令返回以下退出值:

  pears

  apples

  -Fields 忽略由 Fields 变量指定的字段数目。这个标志和 -f Fields 标志是等价的。

  -d 仅显示重复行。

分分快三全天计划网站 1

  -u 仅显示不重复的行。

  bananas

  -s Characters 忽略由 Characters 变量指定的字符的数目。如果 Characters 变量的值超过输入行中的字符的数目, uniq 用空字符串进行比较。如果同时指定 -f 和 -s 标志, uniq 命令忽略由 -s Characters 标志指定的字符的数目,而从由 -f Fields 标志指定的字段后开始。 这个标志和 Characters 标志是等价的。

  缺省情况下,uniq 命令比较所有行。如果指定了-f Fields 或 -Fields 标志, uniq 命令忽略由 Fields 变量指定的字段数目。 field 是一个字符串,用一个或多个 <空格 > 字符将它与其它字符串分隔开。如果指定了 -s Characters 或 -Characters 标志, uniq 命令忽略由 Characters 变量指定的字段数目。为 Fields 和 Characters 变量指定的值必须是正的十进制整数。

  语法

  当前本地语言环境决定了 -f 标志使用的 <空白> 字符以及 -s 标志如何将字节解释成字符。

  /usr/bin/uniq 包含 uniq 命令。

  cherries

  输入文件必须是文本文件。文本文件是包含组织在一行或多行中的字符的文件。这些行的长度不能超出 2048 个字节(包含所有换行字符),并且其中不能包含空字符。

  示例

  标志

  uniq fruit newfruit

  用途

  peaches

  如果 fruit 文件包含下列行:

  -c 在输出行前面加上每行在输入文件中出现的次数。

  bananas

  pears

  报告或删除文件中重复的行。

本文由分分快三计划发布,转载请注明来源

关键词: 分分快三计划