以下是来自pastebin的随机文件的命令:
wget -qO - http://pastebin.com/0cSPs9LR | wc -l
350
wget -qO - http://pastebin.com/0cSPs9LR | sort -u | wc -l
287
wget -qO - http://pastebin.com/0cSPs9LR | sort | uniq | wc -l
287
wget -qO - http://pastebin.com/0cSPs9LR | sort | uniq -u | wc -l
258
Run Code Online (Sandbox Code Playgroud)
手册页不清楚-u
标志在做什么。有什么建议吗?
mur*_*uru 55
uniq
with-u
跳过任何有重复的行。因此:
$ printf "%s\n" 1 1 2 3 | uniq
1
2
3
$ printf "%s\n" 1 1 2 3 | uniq -u
2
3
Run Code Online (Sandbox Code Playgroud)
通常,uniq
最多打印一次行(假设输入已排序)。此选项实际上打印真正独特的行(不再出现)。
小智 45
uniq
, 没有-u
, 使输出的每一行都是唯一的。uniq -u
只打印input 中的每个唯一行。uniq
用于处理具有重复行的文件,并且仅当这些行在输入中连续出现时。因此,就其目的而言,独特的线条是不会立即复制的线条。
(uniq
具有非常有限的短期记忆;它永远不会记住输入中是否较早出现一行,除非它是前一行——这就是为什么uniq
经常与 配对sort
。)
当它遇到一连串重复的行时uniq
,不带-u
参数的 打印该行的一个副本。(它使输出的每一行都是唯一的)。
使用-u
参数,它打印该行的零个副本——重复的运行只是从输出中省略。
cuo*_*glm 18
uniq POSIX 规范清楚地描述了它:
-u
Suppress the writing of lines that are repeated in the input.
Run Code Online (Sandbox Code Playgroud)
-u
选项使uniq
不打印重复的行。
大多数uniq
实现使用字节比较,而 GNUuniq
使用整理顺序来过滤重复的行。因此它可能会在某些语言环境中产生错误的结果,例如在en_US.UTF-8
语言环境中:
$ printf '%b\n' '\U2460' '\U2461' | uniq
?
Run Code Online (Sandbox Code Playgroud)
并-u
没有给你任何台词:
$ printf '%b\n' '\U2460' '\U2461' | uniq -u
<blank>
Run Code Online (Sandbox Code Playgroud)
所以你应该将 locale 设置C
为获取字节比较:
$ printf '%b\n' '\U2460' '\U2461' | LC_ALL=C uniq
?
?
Run Code Online (Sandbox Code Playgroud)
普通的:
echo "a b a b c c c" | tr ' ' '\n'
a
b
a
b
c
c
c
Run Code Online (Sandbox Code Playgroud)
uniq : 没有两个连续的重复行
echo "a b a b c c c" | tr ' ' '\n' | uniq
a
b
a
b
c
Run Code Online (Sandbox Code Playgroud)
排序
echo "a b a b c c c" | tr ' ' '\n' | sort
a
a
b
b
c
c
c
Run Code Online (Sandbox Code Playgroud)
sort -u : 没有两行重复
echo "a b a b c c c" | tr ' ' '\n' | sort -u
a
b
c
Run Code Online (Sandbox Code Playgroud)
排序/ uniq:全部不同
echo "a b a b c c c" | tr ' ' '\n' | sort | uniq
a
b
c
Run Code Online (Sandbox Code Playgroud)
计数不同的事件
echo "a b a b c c c" | tr ' ' '\n' | sort | uniq -c
2 a
2 b
3 c
Run Code Online (Sandbox Code Playgroud)
只有不重复的行(不先排序)
echo "a b a b c c c" | tr ' ' '\n' | uniq -u
a
b
a
b
Run Code Online (Sandbox Code Playgroud)
只有不重复的行(排序后)
echo "a b a b c c c Z" | tr ' ' '\n' | sort | uniq -u
Z
Run Code Online (Sandbox Code Playgroud)
uniq -d : 只打印重复的行,每组一个
echo "a b a b c c c" | tr ' ' '\n' | uniq -d
c
Run Code Online (Sandbox Code Playgroud)
..计数
echo "a b a b c c c" | tr ' ' '\n' | uniq -dc
3 c
Run Code Online (Sandbox Code Playgroud)