linux uniq命令用法

Posted su-root

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux uniq命令用法相关的知识,希望对你有一定的参考价值。

uniq命令:
  对指定的ASCII文件或标准输入进行唯一性检查,以判断文本文件中重复出现的行,常用于分析日志;查看tcp各个状态连接数,ip或域名连接数排名等等场景,一般与 sort 命令结合使用。
 
命令格式:
uniq [选项]... [文件1] [文件2]
uniq从已经排好序的文本文件file1中删除重复的行,输出到标准输出或file2,常作为过滤器,配合管道试压。在使用uniq命令前,必须确保操作的文本文件已经sort排序了,若不带参数运行uniq,将删除重复的行。
 
常见参数:
[[email protected] ~]# uniq --help

用法:uniq [选项]... [文件]
从输入文件或者标准输入中筛选相邻的匹配行并写入到输出文件或标准输出。

不附加任何选项时匹配行将在首次出现处被合并。

长选项必须使用的参数对于短选项时也是必需使用的。
-c, --count 在每行前加上表示相应行目出现次数的前缀编号
-d, --repeated 只输出重复的行,2次或2次以上的。
-D, --all-repeated[=delimit-method 显示所有重复的行
delimit-method=none(default),prepend,separate
以空行为界限
-f, --skip-fields=N 比较时跳过前N 列
-i, --ignore-case 在比较的时候不区分大小写
-s, --skip-chars=N 比较时跳过前N 个字符
-u, --unique 只显示唯一的行
-z, --zero-terminated 使用‘\0‘作为行结束符,而不是新换行
-w, --check-chars=N 对每行第N 个字符以后的内容不作对照
--help 显示此帮助信息并退出
--version 显示版本信息并退出

若域中为先空字符(通常包括空格以及制表符),然后非空字符,域中字符前的空字符将被跳过。

提示:uniq 不会检查重复的行,除非它们是相邻的行。
如果您想先对输入排序,使用没有uniq 的"sort -u"。

测试:

不加参数只对相邻的相同行内容去重

[[email protected] ~]# cat qc.log
192.168.43.117
192.168.43.119
192.168.43.118
192.168.43.118
192.168.43.117
192.168.43.117
192.168.43.119
192.168.43.110
[[email protected] ~]# uniq qc.log
192.168.43.117
192.168.43.119
192.168.43.118
192.168.43.117
192.168.43.119
192.168.43.110

通过sort让重复的行相邻:

[[email protected] ~]# sort qc.log 
192.168.43.110
192.168.43.117
192.168.43.117
192.168.43.117
192.168.43.118
192.168.43.118
192.168.43.119
192.168.43.119

uniq配合sort来去重:

[[email protected] ~]# sort qc.log |uniq
192.168.43.110
192.168.43.117
192.168.43.118
192.168.43.119
[[email protected] ~]# sort -u qc.log 
192.168.43.110
192.168.43.117
192.168.43.118
192.168.43.119

当然我们也可以通sort -u file实现去重

去重计数:

[[email protected] ~]# sort qc.log |uniq -c
      1 192.168.43.110
      3 192.168.43.117
      2 192.168.43.118
      2 192.168.43.119
[[email protected] ~]# sort qc.log 
192.168.43.110
192.168.43.117
192.168.43.117
192.168.43.117
192.168.43.118
192.168.43.118
192.168.43.119
192.168.43.119

查看重复的项:

[[email protected] ~]# sort qc.log |uniq -d
192.168.43.117
192.168.43.118
192.168.43.119

查看所有重复的项:

[[email protected] ~]# sort qc.log |uniq -D
192.168.43.117
192.168.43.117
192.168.43.117
192.168.43.118
192.168.43.118
192.168.43.119
192.168.43.119

不区分大小写,去除重复的项:

[[email protected] ~]# cat qc1.log 
apple
APple BANAN banan grape orange Orange
bqh jyw
bqh1 jyw [[email protected] ~]# uniq -i qc1.log apple BANAN grape orange
bqh jyw
bqh1 jyw

跳过第一列:

[[email protected] ~]# uniq -f1 qc1.log 
apple
bqh  jyw
bqh1 jyw

跳过每行的第一个字符:

[[email protected] ~]# uniq -s1 qc1.log 
apple
APple
BANAN
banan
grape
orange
bqh  jyw
bqh1 jyw

案例:处理一下qc2.log文件内容,将域名取出来并根据域名进行计数排序处理。

[[email protected] ~]# cat  qc2.log
http://www.baidu.com
http://www.xiaobai.com
http://www.etiantian.org
http://www.jyw.com
http://www.jyw.com
http://www.xiaobai.com
http://www.etiantian.org
http://www.jyw.com
http://www.baidu.com
http://www.baidu.com
http://www.jyw.com
http://www.etiantian.org
[[email protected] ~]# awk -F / ‘print $3‘ qc2.log|sort|uniq -c|sort -r
      4 www.jyw.com
      3 www.etiantian.org
      3 www.baidu.com
      2 www.xiaobai.com

方法二:cut方法

[[email protected] ~]# cut -d / -f3 qc2.log |sort -r|uniq -c
      2 www.xiaobai.com
      4 www.jyw.com
      3 www.etiantian.org
      3 www.baidu.com
[[email protected] ~]# cut -d / -f3 qc2.log |sort -r|uniq -c|sort -r
      4 www.jyw.com
      3 www.etiantian.org
      3 www.baidu.com
      2 www.xiaobai.com

当然还有其它方法,在这里就简单介绍一下常用的方法。

以上是关于linux uniq命令用法的主要内容,如果未能解决你的问题,请参考以下文章

Linux中cut,sort,uniq和wc的用法

Linux与bash:3.Linux终端命令之进阶命令(curl,jq,sort,uniq,wc)

Linux uniq命令

linux命令(12)uniq去重

Linux命令总结--uniq命令

Linux命令:uniq