第三步:将以上两个步骤合二为一。

如果按照上面那个步骤来进行操作,虽然是可行的,思路也比较清晰。但是中间会多一个排序生成的过渡文件。等操作完成后,需要手工将这个文件删除。显然这增加了工作量。用过管道符的读者一定知道,这个管道符有一个很特殊的用途。即将某个命令的执行结果传递给下一个命令,让其作为下一个命令的参数。如可以使用命令sort log.lst | uniq –loguniq.lst。

这个命令是什么意思呢?首先是利用sort命令对log.lst文件中的记录进行排序。然后将排序的结果传递给uniq命令。最好操作系统会将去除重复行后的记录保存到loguniq.lst文件中。注意,这里将执行的结果保存到文件中也没有使用这个>重定向符号。而是采用了“-文件名”这个可选项。这个对于那些熟悉重定向符号的读者可能看起来不怎么舒服。但是这是Unix系统中文件中的一个例外,各位系统工程师只需要记住即可。利用上面这个命令,来代替上面两个步骤,除了工作量减轻不少以外,最重要的就是不会产生中间的垃圾文件。即这个命令执行的过程中,不会产生排序后的文件。

第四步:选取重复的行或者统计重复行出现的次数。

以上三个步骤只是完成了一项功能,即去除文件中重复的记录。如果需要对文件中重复的记录进行统计,或者只显示重复的行,则各位读者还需要关注一下笔者下面给大家讲述的内容。要实现这两个功能,就需要用到三个可选项,分别为-u、-d与-c。其中-u表示只让操作系统显示没有重复的行。-d是告诉操作系统只显示重复的记录。而可选项-c是让系统统计重复行出现的次数,并且会在记录的前面加一列内容,表示重复行出现的次数。注意,系统工程师也可以将这些结果保存到一个文件中。但是同上面的原理一样,不需要使用管道符号来实现这个目的。可以直接在原文件后面加入一个目标文件,来实现保存结果的目的。

第五步:截取特定的列来去除重复记录。

如上面这个文件中,不止一个列。如上面这个文件,其内容如下:

销售部出现系统备份故障 故障日期2009年6月3日

采购部出现系统备份故障 故障日期2009年6月5日

销售部出现系统备份故障 故障日期2009年6月6日

此时文件中的记录是没有重复的。但是系统工程师想获得的信息是哪几个部门在重复的出现类似的问题。此时系统工程师需要先截取某一个列,如第一列中的信息。然后再将第一列中的内容利用uniq命令来去除重复的行或者统计重复行出现的次数。要实现这个目的的话,也比较简单。只是在上面几个步骤中,多了一个前期的准备工作而已。即通过cut等类似的命令,将文件中的某列内容截取出来,保存到一个文件中。然后再进行排序与去除重复行的操作。如果系统工程师不想产生中间文件,也可以利用管道符将cut、sort、uniq等三个命令连接起来。另外如果以后需要多次用到这个功能,工程师想贪图方便的话,还可以将这个命令以别名的形式保存起来。如此的话,下次直接将这个命令的组合当作系统命令来使用即可。

  1. Linux下隐藏网络连接的另一种方法
  2. Linux中学会灵活使用shell下的特殊字符
  3. Linux下查看用户登陆后的操作记录


相关内容