先建立一个测试文件:
代码语言:javascript复制[root@bogon ~]# cat test.txt
10.0.0.1
10.0.0.3
10.0.0.4
10.0.0.4
10.0.0.5
10.0.0.1
10.0.0.3
10.0.0.5
先看下 uniq 参数
代码语言:javascript复制-c, --count
在 行首 显示 出现 的 数目
-d, --repeated
仅显示 重复行
-D, --all-repeated
显示 全部 重复行
-f, --skip-fields=N
不比较 起初的 N 栏
-i, --ignore-case
比较时 忽略 大小写
-s, --skip-chars=N
不比较 起初的 N 个 字符
-u, --unique
仅显示 无重复行
-w, --check-chars=N
每行中 比较 不超过 N 个 字符
-N 同 -f N
N 同 -s N
--help 显示 帮助信息, 然后 结束
--version
显示 版本信息, 然后 结束
1. 只输入 uniq 看下:
代码语言:javascript复制[root@bogon ~]# uniq test.txt
10.0.0.1
10.0.0.3
10.0.0.4
10.0.0.5
10.0.0.1
10.0.0.3
10.0.0.5
ps:发现和原文件相比,只是把相邻的内容去重;
如果要把所有的去除,就要用到 sort,sort 是排序的命令,让重复的行相邻
代码语言:javascript复制[root@bogon ~]# sort test.txt
10.0.0.1
10.0.0.1
10.0.0.3
10.0.0.3
10.0.0.4
10.0.0.4
10.0.0.5
10.0.0.5
两者都用的话,效果如下:
代码语言:javascript复制[root@bogon ~]# sort test.txt | uniq
10.0.0.1
10.0.0.3
10.0.0.4
10.0.0.5
2. 如果让去重的行相邻并且计数:
代码语言:javascript复制[root@bogon ~]# sort test.txt | uniq -c
1
2 10.0.0.1
2 10.0.0.3
2 10.0.0.4
2 10.0.0.5
倒序效果
代码语言:javascript复制[root@bogon ~]# cat test.txt | sort | uniq -c | sort -r
3 10.0.0.5
2 10.0.0.4
2 10.0.0.3
2 10.0.0.1
3.sort 中的-k 参数
代码语言:javascript复制 -b 忽略排序字段或关键字中开头的空格
-c 检查是否指定文件已经排序好了,不排序.
-d 在关键字中只考虑[a-zA-Z0-9]字符.
-f 将关键字中的小写字母折合成大写字母.
-g 按照通常的数字值顺序作比较,暗含-b
-i 在关键字中只考虑[ 40- 176]字符.
-k POS1[,POS2]
从关键字POS1开始,*到*POS2结束. 字段数和字符偏移量都从1开始计数(与基于零的 POS格式作比较)
-l 按照当前环境排序.
-m 合并已经排序好的文件,不排序.
-M 按(未知的)<`JAN'<...<`DEC'的顺序比较,暗含-b
-n 按照字符串的数值顺序比较,暗含-b
-o FILE
将结果写入FILE而不是标准输出.
-r 颠倒比较的结果.
-s 通过屏蔽最后的再分类比较来稳定排序.
-t SEP 使用SEP来替代空格的转换non-.
-T DIRECTORY
使用DIRECTORY作为临时文件,而不是$TMPDIR或者/tmp
-u 如果有-c,则按严格的顺序进行检查; 如果有-m,则只输出相等顺序的第一个.
-z 以0字节结束行,而不是使用换行符,这是为了找到-print0
--help 显示帮助并退出.
--version
输出版本信息并退出.
看下需求:实现倒序或者升序用 sort
代码语言:javascript复制[root@bogon conf]# cat arp.txt
192.168.89.234 d481-d7b1-fb75
192.168.89.154 0080-4df0-4ba1
192.168.89.161 d89e-f319-5c74
192.168.89.64 54bf-6470-5b59
192.168.89.199 f0de-f1c1-7d78
192.168.89.246 000e-c6b3-f84f
192.168.89.116 00e0-4c6c-8842
192.168.89.166 509a-4c29-823e
192.168.89.100 f0de-f1d6-e7c6
192.168.100.1 1430-0480-18cb
192.168.100.2 30b4-9e1e-c749
192.168.100.100 8825-93cb-c814
192.168.100.41 f409-d811-832f
192.168.100.224 2c6e-85a5-67c5
192.168.100.85 acbc-32bb-ebd7
192.168.100.219 086d-41c6-657a
192.168.100.16 8c85-9043-ebfa
192.168.100.125 8c85-9086-43f0
192.168.100.196 8438-3566-596e
192.168.100.108 c4b3-01cf-c55f
192.168.100.93 0811-96d6-b8f8
- 默认按照整行排序,
- -t 指定分隔符,-k1,分隔符之后的第一列排序。
- -k POS1,POS2 >> 字段,字段 用逗号来分隔字段 -k 1,1 表示从第一个字段开始,第一个字段结束
- -k 1.1,3.3 用点分隔字符。 第一个字段的第一个字符开始排序到第三个字段的第三个字符结束
[root@bogon conf]# sort -t. -k3.1,3.3nr -k4.1,4.3nr arp.txt
192.168.100.224 2c6e-85a5-67c5
192.168.100.219 086d-41c6-657a
192.168.100.196 8438-3566-596e
192.168.100.125 8c85-9086-43f0
192.168.100.108 c4b3-01cf-c55f
192.168.100.100 8825-93cb-c814
192.168.100.93 0811-96d6-b8f8
192.168.100.85 acbc-32bb-ebd7
192.168.100.41 f409-d811-832f
192.168.100.16 8c85-9043-ebfa
192.168.100.2 30b4-9e1e-c749
192.168.100.1 1430-0480-18cb
192.168.89.246 000e-c6b3-f84f
192.168.89.234 d481-d7b1-fb75
192.168.89.199 f0de-f1c1-7d78
192.168.89.166 509a-4c29-823e
192.168.89.161 d89e-f319-5c74
192.168.89.154 0080-4df0-4ba1
192.168.89.116 00e0-4c6c-8842
192.168.89.100 f0de-f1d6-e7c6
192.168.89.64 54bf-6470-5b59
可以看出已经实现 ip 地址倒序排列
标题:uniq、sort命令理解
作者:cuijianzhe
地址:https://cloud.tencent.com/developer/article/2022726