Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2793193
  • 博文数量: 471
  • 博客积分: 7081
  • 博客等级: 少将
  • 技术积分: 5369
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-04 21:55
文章分类

全部博文(471)

文章存档

2014年(90)

2013年(69)

2012年(312)

分类: LINUX

2013-02-25 09:33:20


sort 命令的-u参数只对键值段有效,即使其它部分不同,sort对于相同键值段的记录还是会丢弃。

说得简单一些就是把Linux中现有的工具和命令按照一定的方式(流程控制和条件判断)重新组织的方法,而其中的文本工具和命令的使用方法占据了Shell学习过程的大部分内容,只要掌握了这些工具的使用方法,学习好Shell也是指日可待。本文说明如何使用uniq命令显示或删除文本中重复的行。

uniq命令格式:

uniq [  -c | -d | -u ] [  -f Fields ] [  -s Characters ] [  -Fields ] [ +Characters ] [ InFile [ OutFile ] ]

用法说明

uniq命令如果执行成功,uniq 命令退出,返回值 0。否则,命令退出返回值大于 0。

uniq命令删除文件中的重复行。 uniq 命令读取由 InFile 参数指定的标准输入或文件。该命令首先比较相邻的行,然后除去第二行和该行的后续副本。重复的行一定相邻,这是必须的如果不相信邻,uniq将不能合并,即远处相同的不能变成唯一,切记。(在发出 uniq 命令之前,请使用 sort 命令使所有重复行相邻。)最后,uniq 命令将最终单独的行写入标准输出或由 OutFile 参数指定的文件。InFile 和 OutFile 参数必须指定不同的文件。

其中InFile输入文件必须是文本文件。该文本文件是包含组织在一行或多行中的字符的文件。这些行的长度不能超出 2048 个字节(包含所有换行字符),并且其中不能包含空字符。 LAMP学习 linux基础 centos教程

缺省情况下,uniq 命令比较所有行。如果指定了-f Fields 或 -Fields 标志, uniq 命令忽略由 Fields 变量指定的字段数目。 field 是一个字符串,用一个或多个 <空格 > 字符将它与其它字符串分隔开。如果指定了 -s Characters 或 -Characters 标志, uniq 命令忽略由 Characters 变量指定的字段数目。 为 Fields 和 Characters 变量指定的值必须是正的十进制整数。

当前本地语言环境决定了 -f 标志使用的 <空白> 字符以及 -s 标志如何将字节解释成字符。

参数说明

  • -c     删除重复行后输出文本内容,并在输出行前面加上每行在输入文件中出现的次数。
  • -d     仅显示重复行。
  • -f Fields     忽略由 Fields 变量指定的字段数目。

    如果 Fields 变量的值超过输入行中的字段数目, uniq 命令用空字符串进行比较。 这个标志和 -Fields 标志是等价的。

  • -u     仅显示不重复的行。
  • -s Characters     忽略由 Characters 变量指定的字符的数目。

如果 Characters 变量的值超过输入行中的字符的数目,uniq 用空字符串进行比较。 如果同时指定 -f 和 -s 标志, uniq 命令忽略由 -s Characters 标志指定的字符的数目,而从由 -f Fields 标志指定的字段后开始。 这个标志和 +Characters 标志是等价的。

  • -Fields     忽略由 Fields 变量指定的字段数目。 这个标志和 -f Fields 标志是等价的。
  • +Characters     忽略由 Characters 变量指定的字符的数目。

如果同时指定 - Fields 和 +Characters 标志, uniq 命令忽略由 +Characters 标志指定的字符数目,并从由 -Fields 标志指定的字段后开始。 这个标志和 -s Characters 标志是等价的。



uniqe -c -d -u


# cat fruits.txt
apple
apple
banana
%%banana
orange
ORANGE
Persimmon


# uniq fruits.txt
apple
banana
%%banana
orange
ORANGE
Persimmon

# uniq -c fruits.txt
      2 apple
      1 banana
      1 %%banana
      1 orange
      1 ORANGE
      1 Persimmon

如果要按照出现次数升序,我自己写的,嘻嘻

# uniq -c fruits.txt|sort -t' ' -nk1
      1 banana
      1 %%banana
      1 orange
      1 ORANGE
      1 Persimmon
      2 apple




# uniq -c -d fruits.txt
      2 apple

# uniq -c -u fruits.txt
      1 banana
      1 %%banana
      1 orange
      1 ORANGE
      1 Persimmon





阅读(6478) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~