shell使用--sort和uniq
sort常用来进行排序
sort命令是帮我们依据不同的数据类型进行排序,其语法及常用参数格式:
sort [-bcfMnrtk][源文件][-o 输出文件]
补充说明:sort可针对文本文件的内容,以行为单位来排序。
参 数:
-b 忽略每行前面开始出的空格字符,从第一个可见字符开始比较。
-c 检查文件是否已经按照顺序排序,如果乱序,则输出第一个乱序的行的相关信息,最后返回1。
-C会检查文件是否已排好序,如果乱序,不输出内容,仅返回1
-f 排序时,忽略大小写字母。
-M 将前面3个字母依照月份的缩写进行排序。
-n 依照数值的大小排序。
-o<输出文件> 将排序后的结果存入指定的文件。
-r 以相反的顺序来排序(默认是升序)。
-t<分隔字符> 指定排序时所用的栏位分隔字符。
-k 选择以哪个区间进行排序。
说明:sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
[rocrocket@rocrocket programming]$ cat seq.txt
banana
apple
pear
orange
[rocrocket@rocrocket programming]$ sort seq.txt
apple
banana
orange
pear
uniq命令是一个文本去重命令,它能对标准输入和文本文件进行去重操作,并且能将结果通过stdout输出,uniq命令经常会同sort命令一起使用,uniq命令默认对多条重复的行只显示一行
-c, --count 在每行记录前显示该行内容的数量
-d, --repeated 仅显示重复的记录行,并且去重 -D, --all-repeated[=delimit-method] 仅显示重复的行,并不去重 -f, --skip-fields=N avoid comparing the first N fields
-i, --ignore-case 去重显示,uniq的默认参数 -s, --skip-chars=N 指定忽略行的前N个字符
-u, --unique 仅显示非重复的行 -z, --zero-terminated 末尾生成0个字节的终止符作为输出(\0),这样的目的就是避免一条记录行因为存在空格被识别为多行 -w, --check-chars=N 只对比指定的N个字符,默认是从开始算起,如果和-s一起使用那么要排除-s指定的字符数
配合使用:
shell 统计一个文本文件中,出现次数最多的ip地址,并打印对应的ip和出现的次数
可以使用以下命令来统计文本文件中出现次数最多的 IP 地址:
```
awk '{print $1}' demo.txt | sort | uniq -c | sort -nr | head -n 1
```
这个命令的含义是:
1. 使用 awk 工具打印每行的第一个字段,也就是 IP 地址;
2. 使用 sort 对.IP 地址进行排序;
3. 使用 uniq -c 统计每个 IP 地址出现的次数,并加上一个数值前缀;
4. 使用 sort -nr 按照出现的次数进行倒序排序;
5. 使用 head -n 1 取最高出现次数的 IP 地址。
输出结果将包含两个字段,第一个字段是 IP 出现的次数,第二个字段是对应的 IP 地址。例如:
```
4 192.168.1.100
```
这个结果表示,在 demo.txt 文件中, IP 地址 192.168.1.100 出现了 4 次。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了