uniq

报告或过滤掉文件中的重复行.
从输入文件或者标准输入中筛选相邻的匹配行并写入到输出文件或标准输出

语法

  uniq [options]... [InputFile [OutputFile]]

选项


   -N
   -f N
   --skip-fields=N
       比较时跳过前N 列

   +N
   -s N
   --skip-chars=N
       比较时跳过前N 个字符

   -c
   --count
       行前打印每一行的次数

   -i
   --ignore-case
       在比较行时忽略差异。

   -d
   --repeated
      仅打印重复的行。

   -D
   --all-repeated
       打印所有重复的行,只有重复的行。
       此选项主要与其他选项一起使用,例如忽略大小写或只比较选定字段。
       这是一个GNU扩展。

   -u
   --unique
       不输出在输入中重复出现的行。
       只打印输入中唯一的行

   -w N
   --check-chars=N
       比较每行中的N个字符(跳过指定的字段和字符后)。
       默认情况下,将比较所有其他行

默认情况下,uniq在一个已排序的文件中打印唯一的行,它丢弃了所有相同的连续输入行,只有一条除外,使输出包含唯一的行

uniq将只比较输入中连续出现的行.

如果输入中的重复行不相邻,则不会检测到它们,因此可能需要首先对文件进行排序.

如果给定了-(或什么都没有)的InputFile,那么uniq将从标准输入中读取.

如果没有指定OutputFile文件,uniq将写入标准输出.

例子

打印文件 demo.txt,省略任何重复的行:

$ sort demo.txt | uniq

仅输入 1, 1, 2, 3 的唯一编号

$ printf "%s\n" 1 1 2 3 | uniq -u
2
3

计算一些单词的频率:

 echo "one two three one three" | tr -cs "A-Za-z" "\n" | sort | uniq -c | sort -n -r

uniq 命令实例:

linux命令:uniq -c | sed -r 's/([0-9]+)\s(.*)/"\2": \1,/;$s/,/\n}/;1i{' \1,/;$s/,/\n}/;1i{' 's/([0-9]+)\s(.*)/"\2": -r sed | -c uniq uniq -c | sed -r 's/([0-9]+)\s(.*)/"\2": \1,/;$s/,/\n}/;1i{'rootopen.com
linux命令:uniq -c | sed -r 's/([0-9]+)\s(.*)/"\2": \1,/;$s/,/\n}/;1i{' \1,/;$s/,/\n}/;1i{' 's/([0-9]+)\s(.*)/"\2": -r sed | -c uniq uniq -c | sed -r 's/([0-9]+)\s(.*)/"\2": \1,/;$s/,/\n}/;1i{'rootopen.com
2018-05-18 21:53:48

Linux的Bash命令行(A-Z排序)