Chinaunix首页 | 论坛 | 博客
  • 博客访问: 560598
  • 博文数量: 166
  • 博客积分: 4038
  • 博客等级: 上校
  • 技术积分: 1115
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-14 23:29
文章分类

全部博文(166)

文章存档

2010年(12)

2009年(126)

2008年(28)

分类: LINUX

2009-02-20 14:35:08

uniq对指定的ASCII文件或标准输入进行唯一性检查,以判断文本文件中重复出现的行。常用于系统排查及日志分析。
一、版本
以红旗DC Server 5.0为例,自带版本为:
引用
# uniq --version
uniq (coreutils) 5.2.1

二、常用参数
命令格式:
引用
uniq [options] [file1 [file2] ]

uniq从已经排序好的文本文件file1中删除重复的行,输出到标注输出或file2。常作为过滤器,配合管道使用。
在使用uniq命令前,必须确保操作的文本文件已经过sort排序。若不带参数运行uniq,将删除重复的行。
常见参数有:
引用
-c, --count
   在每行旁边显示该行重复出现的次数
-d, --repeated
   仅显示重复出现的行
-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
   显示版本信息
[输入文件]
   已经排序好的文本文件或标准输入
[输出文件]
   指定的输出文件,若不指定,则显示在屏幕上

三、示例
1、原始文件
引用
# cat text
The year.
The year.
Second
Second
Second
Third
Third
Four

2、-D参数结果
引用
# uniq -D text
The year.
The year.
Second
Second
Second
Third
Third
# uniq --all-repeated=prepend text

The year.
The year.

Second
Second
Second

Third
Third
# uniq --all-repeated=separate text
The year.
The year.

Second
Second
Second

Third
Third

3、-f和-s参数
原文:
引用
# cat text
The year.
The year ok.
Second
Second
Second
Third
Third
Four

参数结果:
引用
# uniq -u text
The year.
The year ok.
Four
# uniq -u -f 1 text
The year.
The year ok.
# uniq -u -f 2 text
The year.
The year ok.
# uniq -u -f 3 text

下面显示文件text中不重复的行,忽略前2个字段及后面的3个字符,即从第3个字段的第4个字符开始做比较:
(因为ok.后面还有\n回车符,当同第一行比较时,是有差异的)
引用
# uniq -u -f 2 -s 3 text
The year.
The year ok.
# uniq -u -f 2 -s 4 text
# uniq -u -2 +3 text
The year.
The year ok.
# uniq -u -2 +4 text

看多一个更简单的例子:
引用
# cat text
test one
eest one
# uniq -u text
test one
eest one
# uniq -u -f 1 text
# uniq -u -s 1 text

※所以,字段数和字符数都是从1开始的。

4、其他
uniq list list.new

把list文件删除重复的行后,输出到list.new中。(重复的行仅保留一行)
sort names | uniq -d

查看names文件中那些行是重复的
四、参考资料
原文:
阅读(790) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~