本次我们来学习一下uniq shell 命令,wiki见这里:http://en.wikipedia.org/wiki/Uniq;wiki的结果比较简单,我们可以直接在系统上先man一下看下结果:
uniq - report or omit repeated lines
这个摘要很有一下,注意是report or omit,也就是说既能显示某些信息,也能忽略某些信息,后者出现在我们头脑的机会貌似要少一些。还有一点要注意的是,这个命令是对输入行进行操作,也就是行操作,这点在使用前就要有概念。
uniq函数能够从输入判断连续的行是否是unique的,同时把结果输出,可以是标准输出,也可以是文件。
uniq支持参数,其中主要的参数包括:
-c:打印出现的行数 -d:打印重复行 -f:跳过比较前面的N个域(Field) -i:忽略大小写 -s:跳过比较前面的N的字符(Character) -u:打印唯一行 -w:每行检查的字幕不超过N
uniq的主要功能就这么多,下面我们通过例子来验证一下:
我们使用文件corpus.txt,文件内容特意处理过,尽可能使用uniq的这些特性:
>>cat corpus.txt hadoop dfs dfsl hbase Memcache sql Sql SQL memcache MEMCACHE HBase hadoop HADOOP hive Hive sql sql big big BIG Big hbase APACHE Apache apache
-c参数能够显示出单词出现的次数
>>cat corpus.txt | uniq -c 1 hadoop 1 dfs 1 dfsl 1 hbase 1 Memcache 1 sql 1 Sql 1 SQL 1 memcache 1 MEMCACHE 1 HBase 1 hadoop 1 HADOOP 1 hive 1 Hive 2 sql 2 big 1 BIG 1 Big 1 hbase 1 APACHE 1 Apache 1 apache
-i参数不区分大小写,显示遇见的第一行, 如下面的sql和APACHE显示
>>cat corpus.txt | uniq -ci 1 hadoop 1 dfs 1 dfsl 1 hbase 1 Memcache 3 sql 2 memcache 1 HBase 2 hadoop 2 hive 2 sql 4 big 1 hbase 3 APACHE
-d参数显示出出现次数大于1的行
>>cat corpus.txt | uniq -cid 3 sql 2 memcache 2 hadoop 2 hive 2 sql 4 big 3 APACHE
-u参数显示只出现过一次的行
>>cat corpus.txt | uniq -ciu 1 hadoop 1 dfs 1 dfsl 1 hbase 1 Memcache 1 HBase 1 hbase
-s参数表示从第N个字符开始统计,下面例子表示从第一个字符开始统计,即忽略首字符,看最后Apache的输出
>>cat corpus.txt | uniq -c -s 1 1 hadoop 1 dfs 1 dfsl 1 hbase 1 Memcache 2 sql 1 SQL 1 memcache 1 MEMCACHE 1 HBase 1 hadoop 1 HADOOP 2 hive 2 sql 2 big 1 BIG 1 Big 1 hbase 1 APACHE 2 Apache
-w参数表示只比较N个字符,这里只比较两个字符,可以观察下dfs的输出。
>>cat corpus.txt | uniq -c -s 1 -w 2 1 hadoop 2 dfs 1 hbase 1 Memcache 2 sql 1 SQL 1 memcache 1 MEMCACHE 1 HBase 1 hadoop 1 HADOOP 2 hive 2 sql 2 big 1 BIG 1 Big 1 hbase 1 APACHE 2 Apache
uniq的主要命令就是这些,还有个-f参数大家可以自行参考下官网,uniq的命令看起来不是特别强大,但是和sort一起使用会发挥出巨大的能量,大家可以先行学习下sort的功能,下次我们再来学习sort命令