uniq & sort - 去重和排序
uniq - 去重
语法: uniq [-c|-d|-u|-i] [input] [output]
-
-c, --count
:在每列旁边显示重复出现的次数点击查看代码
# 准备文档 [root@node02 ~]# cat a aa aa bb Bb BB cc # 去重,显示每个字符串去重后的次数 [root@node02 ~]# uniq -c a 2 aa 1 bb 1 Bb 1 BB 1 cc
-
-d, --repeated
:仅显示重复出现的列“内容” -
-D
:显示所有重复的列 -
-u, --unique
:仅显示出一次的行列点击查看代码
# 准备文档 [root@node02 ~]# cat a aa aa bb Bb BB cc # 只显示重复出现的行(聚合显示) [root@node02 ~]# uniq -d a aa # 只显示重复出现的行(全部显示) [root@node02 ~]# uniq -D a aa aa # 去重,显示出现一次的 [root@node02 ~]# uniq -u a bb Bb BB cc
-
-f
:忽略前N列进行去重 -
-s
:忽略前N个字符进行去重 -
-i
:忽略大小写点击查看代码
# 准备文档 [root@node02 ~]# cat a aa c aa c bb b Bb b BB a cc a da e # 忽略前n列进行去重,重复的只显示第一次出现的内容 [root@node02 ~]# uniq -f 1 a aa c bb b BB a da e # 忽略前n个字符进行去重操作 [root@node02 ~]# uniq -i a aa c bb b BB a cc a da e
-
[input]
:指定去重的文件, 不指定则从标准流读取 -
[output]
:指定写入结果的文件, 不指定则输出到终端点击查看代码
# 准备文档 [root@node02 ~]# cat a aa aa bb Bb BB cc # 去重后,输入到文件 b [root@node02 ~]# uniq -ci a b # 验证 [root@node02 ~]# cat b 2 aa 3 bb 1 cc # 通过标准流读取 [root@node02 ~]# cat a | uniq -c 2 aa 1 bb 1 Bb 1 BB 1 cc
sort - 排序
语法: sort [option] [input]
-
-n
: 通常情况下是按照“位+数字”的方式排序,指定-n后按数字大小排序 -
-r
: 反序点击查看代码
# 准备文件 [root@node02 ~]# cat a 1 11 7 99 # 按数字排序 [root@node02 ~]# sort -n a 1 7 11 99 # 反序 [root@master ~]# sort -nr b 99 11 7 1
-
-t<分隔符>
: 指定排序时用的分隔符 -
-k
: 指定列排序,可以指定起止的列和字符(见示例), -
一般情况下
-t
和-k
结合使用,先使用-t
指定分隔符,再使用-k
指定列去做排列点击查看代码
# 准备文件 [root@node02 ~]# cat a 3:1 9:11 2:2 # 设置分隔符为:,按第二列内容排序 [root@node02 ~]# sort -t: a 3:1 9:11 2:2
高级用法:-k X.m,Y.n
# -k X.m,Y.n # 从X列的第m个字符作为起始位置排序,结束位置是Y列的第n个字符 # 可以指定多个 -k # 结束位置我感觉用处不大 # 准备文件 [root@node02 ~]# cat a 12 9 3000 12 7 20000 31 8 100 # 先按照第1列第二个字符进行排序,在根据第3列排序 [root@node02 ~]# sort -n -k 1.2 -k 3 a 31 8 100 12 7 20000 12 9 3000
-
-c
: 检查是否已经按照顺序排序,如果未排序,返回第一个次序不对的内容 -
-o [output]
: 将排序后结果输出到文件点击查看代码
# 准备文件 [root@node02 ~]# cat a 3:1 9:11 2:2 # 检查排序是否正确,该结果表示从第三行开始排序出现异常 [root@node02 ~]# sort -c a sort:a:3:无序: 2:2 # 排序输出到新文件并检查,无返回表示排序正确 [root@node02 ~]# sort a -o b [root@node02 ~]# sort -c b
-
-h
: 可排序 MB,GB 等单位点击查看代码
# -h 可以针对内存或磁盘空间大小单位进行排序 [root@node02 ~]# sort -h b 20KB 3000MB 1TB 11TB
-
-b
: 忽略每行前边开始出现的空格符 -
-f
: 排序时, 将小写字母视为大写字母 -
[input]
: 需要排序的文件列表, 可以指定多个
示例
# awk,sort,uniq 配合使用从 nginx 日志中统计访问数量最多的 5 个 ip
awk -F"|" '{print $3}' log | sort | uniq c | sort -nr | head -5
"""
1. 使用 awk 工具, 指定分隔符为'|', 指定输入文件 log,输出第三列内容,讲结果传给管道符
2. 接收的只有一列,直接使用 sort 排序
3. 使用 uniq 进行去重,指定 -cd 显示重复访问的 IP,此时数据被处理为 <次数> <ip>
4. 使用 sort 排序,指定 -nr 以数字大小排序,并且反序
5. 使用 head -5 输出最高的 5 条数据
"""
欢迎加 1092845214 交流沟通呀~
本文来自博客园,作者:难德糊涂,转载请注明原文链接:https://www.cnblogs.com/yangkaiyue/p/18236339
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通