uniq命令的使用

uniq命令:

一、 介绍

uniq对指定的ASCII文件或标准输入进行唯一性检查,以判断文本文件中重复出现的行。常用于系统排查及日志分析。 

二、 命令格式:

uniq [options] [ file1 [file2] ]

uniq从已经排序好的文本文件file1中删除重复的行,输出到标准输出或file2。常作为过滤器,配合管道使用。

在使用uniq命令前,必须确保操作的文本文件已经过sort排序。若不带参数运行uniq,将删除重复的行。

三、 常见参数:(只记-c就行,其它的参数只做了解)

-c,--count*****     (比较常用)

    在每行旁边显示该行重复出现的次数

-d, --repeated

仅显示重复出现两次或两次以上的行,默认的去重包含1次。

-D, --all –repeated[=method]

以指定的格式打印所有重复的行。格式仅使用于长选项参数,可使用none(默认),prepend,separate三个,效果见后面。以空行进行区分。

-f n, --skip-fields=n

前n个字段与每个字段前的空白一起被忽略。一个字段(fields)是一个非空格、非制表符的字符串,彼此由制表符和空格隔开(字段从1开始编号),与-n相同,n为字段数。

-i , --ignore-case

在判断重复行时,忽略大小写区别

-s n,--skip-chars=n

    前n个字符被忽略,之前的字符被跳过(字符从1开始编号)。与+n相同,n为字符数。

-u, --unique

仅显示出现一次的行

-w n, --check-chars=n

仅比较每行前面n个字符

--help

显示帮助信息

--version

显示版本信息

 

【输入文件】

     已经排序好的文本文件或标准输入

【输出文件】

     指定的输出文件,若不指定,则显示在屏幕上

 

结论:uniq只能对相邻的相同行内容去重。因此,在去重之前要先用sort进行排序,目的是让相同的内容相邻,好实现完全去重。

 

测试数据

10.0.0.9

10.0.0.8

10.0.0.7

10.0.0.7

10.0.0.8

10.0.0.8

10.0.0.9

 

[root@localhost shell]# cat oldboy.txt

10.0.0.9

10.0.0.8

10.0.0.7

10.0.0.7

10.0.0.8

10.0.0.8

10.0.0.9

 

a.只对相邻的相同行的内容去重。

[root@localhost shell]# uniq oldboy.txt

10.0.0.9

10.0.0.8

10.0.0.7

10.0.0.8

10.0.0.9

 

b. sort命令让重复的行相邻

[root@localhost shell]# sort oldboy.txt

10.0.0.7

10.0.0.7

10.0.0.8

10.0.0.8

10.0.0.8

10.0.0.9

10.0.0.9

 

c.uniq配合sort去重

[root@localhost shell]# sort -u oldboy.txt

10.0.0.7

10.0.0.8

10.0.0.9

sort去重功能

[root@localhost shell]# sort oldboy.txt | uniq

10.0.0.7

10.0.0.8

10.0.0.9

 

d.去重计数

[root@localhost shell]# sort oldboy.txt | uniq -c                       

      2 10.0.0.7

      3 10.0.0.8

      2 10.0.0.9

 

企业案例:

处理一下文件内容,将域名取出并根据域名进行计数排序处理:(百度和souhu面试题)

oldboy.log

http://www.etiantian.org/index.html

http://www.etiantian.org/1.html

http://post.etiantian.org/index.html

http://mp3.etiantian.org/index.html

http://www.etiantian.org/3.html

http://post.etiantian.org/2.html

解答:

分析:此类问题是运维工作中最常见的问题。可以演变成分析日志,查看TCP各个状态连接数,查看单IP连接数排名等等

[root@localhost shell]# cat oldboy.log

http://www.etiantian.org/index.html

http://www.etiantian.org/1.html

http://post.etiantian.org/index.html

http://mp3.etiantian.org/index.html

http://www.etiantian.org/3.html

http://post.etiantian.org/2.html

 

第一种方法:

[root@localhost shell]# awk -F / '{print $3}' oldboy.log | sort -r| uniq -c   //去重,以倒序的方式计数

      3 www.etiantian.org

      2 post.etiantian.org

      1 mp3.etiantian.org

 

第二种方法:

[root@localhost shell]# cut -d / -f3 oldboy.log | sort -r|uniq -c

      3 www.etiantian.org

      2 post.etiantian.org

      1 mp3.etiantian.org

 

第三种方法:

[root@localhost shell]# awk -F "/" '{S[$3]++}END{for(k in S) print k,S[k]}' oldboy.log |sort -rn -k2

www.etiantian.org 3

post.etiantian.org 2

mp3.etiantian.org 1

posted @ 2019-11-19 15:45  走天涯123  阅读(291)  评论(0编辑  收藏  举报