0%

uniq命令

一、常用用法

1
uniq [-c] [-d | -u] [-i] [-f N] [-s N] INPUT

二、含义与选项

2.1、含义

对“相邻行”进行“唯一性”运算,也即对“相邻行”进行互相比较操作。

2.2、选项

“-c”:打印行出现次数。
“-d”:只打印出现次数大于1的行。
“-u”:只打印出现次数等于1的行。
“-i”:“相邻行”比较时,忽略大小写差异。
“-f N”:“相邻行”比较时,跳过前N个字段的比较,字段之间由“空格+TAB”组成的字符串隔开。
“-s N”:“相邻行”比较时,跳过前N个字符的比较。

三、实验

现在有一个文件“a.txt”,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
a
b
b
c
c
c
D
d
h world
u world
jklhaha
abchaha
jklmhah
abcdhah
h world hah
u world ahh

3.1、实验1

1
uniq a.txt

执行以上命令,得到如下所示结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
a
b
c
D
d
h world
u world
jklhaha
abchaha
jklmhah
abcdhah
h world hah
u world ahh

表明默认情况下,会打印所有行,但是重复行只打印1次。

3.2、实验2

1
uniq -c a.txt

执行以上命令,得到如下所示结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
1 a
2 b
3 c
1 D
1 d
1 h world
1 u world
1 jklhaha
1 abchaha
1 jklmhah
1 abcdhah
1 h world hah
1 u world ahh

增加“-c”选项,额外打印了行出现次数。

3.3、实验3

1
uniq -c -u a.txt

执行以上命令,得到如下所示结果:

1
2
3
4
5
6
7
8
9
10
11
1 a
1 D
1 d
1 h world
1 u world
1 jklhaha
1 abchaha
1 jklmhah
1 abcdhah
1 h world hah
1 u world ahh

增加“-u”选项,只打印出现次数等于1的行。

3.4、实验4

1
uniq -c -d a.txt

执行以上命令,得到如下所示结果:

1
2
2 b
3 c

增加“-d”选项,只打印出现次数大于1的行。

3.5、实验5

1
uniq -c -d -i a.txt

执行以上命令,得到如下所示结果:

1
2
3
2 b
3 c
2 D

增加“-i”选项,比较时忽略大小写差异。

3.6、实验6

1
uniq -c -d -f 1 a.txt

执行以上命令,得到如下所示结果:

1
2
3
8 a
2 h world
4 jklhaha

增加“-f 1”选项,跳过第1个字段的比较。

3.7、实验7

1
uniq -c -d -s 3 a.txt

执行以上命令,得到如下所示结果:

1
2
3
8 a
2 h world
2 jklhaha

增加“-s 3”选项,跳过前3个字符的比较。

四、其他

由于涉及到两个字符串的比较等,故而程序实现中使用到“LC_COLLATE”等环境变量,最终结果受到“LC_COLLATE”等环境变量的控制。


参考文献: [1]man uniq
您的支持将鼓励我继续分享!