uniq、sort命令理解

Published on with views and comments

先建立一个测试文件:

[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 参数

-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 看下:

[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 是排序的命令,让重复的行相邻

[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

两者都用的话,效果如下:

[root@bogon ~]# sort test.txt | uniq 10.0.0.1 10.0.0.3 10.0.0.4 10.0.0.5

2. 如果让去重的行相邻并且计数:

[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

倒序效果

[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 参数

-b 忽略排序字段或关键字中开头的空格 -c 检查是否指定文件已经排序好了,不排序. -d 在关键字中只考虑[a-zA-Z0-9]字符. -f 将关键字中的小写字母折合成大写字母. -g 按照通常的数字值顺序作比较,暗含-b -i 在关键字中只考虑[\040-\0176]字符. -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

[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://cjzshilong.cn/articles/2019/03/23/1553311254119.html