Linux命令更新-sort 和 uniq 命令

简介


sortuniq 都是 Linux 系统中常用的文本处理命令。

  • sort 命令用于对文件内容进行排序。

  • uniq 命令用于去除文件中重复出现的行。

1. sort 命令

命令格式

复制代码
sort [选项] [文件]
  • 选项

  • -n: 按照数字进行排序

  • -r: 反向排序

  • -c: 统计每个元素出现的次数

  • -t 分隔符: 指定分隔符,默认为空格

  • -k 列号: 指定排序列,从左到右从 1 开始计数

  • -u: 仅显示不重复的行

命令功能

sort 命令可以对文件内容进行排序,支持多种排序方式,包括:

  • 按数字排序

  • 按字符串排序

  • 按自定义列排序

  • 正序排序

  • 反序排序

命令用法

1. 按数字排序

复制代码
sort numbers.txt

例如,将文件 numbers.txt 中的内容按数字从小到大排序:

复制代码
10
2
5
4
3

2. 按字符串排序

复制代码
sort words.txt

例如,将文件 words.txt 中的内容按字母顺序排序:

复制代码
apple
banana
cherry
grape
orange

3. 按自定义列排序

复制代码
sort -k 3 students.txt

例如,将文件 students.txt 中的内容按第三列(成绩)从高到低排序:

复制代码
张三,15,90
李四,18,80
王五,17,70
赵六,16,60

4. 正序排序

默认情况下,sort 命令会对文件内容进行正序排序。

复制代码
sort numbers.txt

5. 反向排序

复制代码
sort -r numbers.txt

例如,将文件 numbers.txt 中的内容按数字从大到小排序:

复制代码
10
5
4
3
2

6. 统计每个元素出现的次数

复制代码
sort -c words.txt

例如,统计文件 words.txt 中每个单词出现的次数:

复制代码
2 apple
1 banana
1 cherry
2 grape
1 orange

7. 指定分隔符

复制代码
sort -t : students.txt

例如,将文件 students.txt 中的内容按第一列(姓名)排序,并使用冒号作为分隔符:

复制代码
张三:15:90
李四:18:80
王五:17:70
赵六:16:60

8. 仅显示不重复的行

复制代码
sort -u words.txt

例如,显示文件 words.txt 中不重复的单词:

复制代码
apple
banana
cherry
grape
orange

2. uniq 命令

命令格式

复制代码
uniq [选项] [文件]
  • 选项

  • -c: 统计每个元素出现的次数

  • -d: 显示重复的行

  • -u: 仅显示不重复的行

命令功能

uniq 命令用于去除文件中重复出现的行,支持多种操作,包括:

  • 仅显示不重复的行

  • 显示重复的行

  • 统计每个元素出现的次数

命令用法

1. 仅显示不重复的行

复制代码
uniq words.txt

例如,显示文件 words.txt 中不重复的单词:

复制代码
apple
banana
cherry
grape
orange

2. 显示重复的行

复制代码
uniq -d words.txt

例如,显示文件 words.txt 中重复出现的单词:

复制代码
apple
banana

3. 统计每个元素出现的次数

复制代码
uniq -c words.txt

例如,统计文件 words.txt 中每个单词出现的次数:

复制代码
2 apple
1 banana
1 cherry
2 grape
1 orange

运维案例

案例一:统计网站日志中的访问次数

假设您需要统计网站日志文件 /var/log/nginx/access.log 中每个 IP 地址的访问次数。

步骤:

  1. 提取 IP 地址:

    cat /var/log/nginx/access.log | awk '{print $1}' > ips.txt

  2. 排序并去除重复的 IP 地址:

    sort -u ips.txt > unique_ips.txt

  3. 统计每个 IP 地址的访问次数:

    for ip in (cat unique_ips.txt); do count=(grep -c "ip" /var/log/nginx/access.log) echo "ip $count"
    done > ip_counts.txt

结果:

复制代码
192.168.1.10 100
192.168.1.11 50
192.168.1.12 20

案例二:比较两个文件的差异并忽略空白行

假设您需要比较两个文件 /file1.txt/file2.txt 的差异,并忽略空白行。

步骤:

  1. 删除两个文件中的空白行:

    sed -i '/^ */d' file1.txt sed -i '/^ */d' file2.txt

  2. 比较两个文件并忽略重复行:

    comm -3 file1.txt file2.txt | grep -v '^$'

结果:

复制代码
+ line1
- line2

案例三:从多个文件中提取唯一内容

假设您需要从多个文件(file1.txtfile2.txtfile3.txt)中提取唯一内容。

步骤:

  1. 将多个文件的内容合并到一个文件中:

    cat file1.txt file2.txt file3.txt > all_lines.txt

  2. 排序并去除重复行:

    sort -u all_lines.txt > unique_lines.txt

结果:

复制代码
line1
line2
line3

注意:

  • 本文档仅介绍了 sortuniq 命令的基本使用方法和常见运维案例,并未涵盖所有功能和参数。

  • 在使用 sortuniq 命令进行实际操作时,请注意备份文件,以免造成数据丢失。

  • 可以根据实际需要组合使用 sortuniq 命令,实现更复杂的功能。

希望这份文档能够帮助您更好地了解和使用 sortuniq 命令。

相关推荐
卓码软件测评2 小时前
第三方软件测试机构【性能测试工具用LoadRunner还是JMeter?】
java·功能测试·测试工具·jmeter·性能优化
知星小度S2 小时前
系统核心解析:深入操作系统内部机制——进程管理与控制指南(一)【进程/PCB】
linux·运维·服务器·进程
编码浪子5 小时前
趣味学RUST基础篇(异步)
服务器·rust·负载均衡
Lionel_SSL5 小时前
《深入理解Java虚拟机》第三章读书笔记:垃圾回收机制与内存管理
java·开发语言·jvm
记得开心一点嘛5 小时前
手搓Springboot
java·spring boot·spring
老华带你飞6 小时前
租房平台|租房管理平台小程序系统|基于java的租房系统 设计与实现(源码+数据库+文档)
java·数据库·小程序·vue·论文·毕设·租房系统管理平台
独行soc6 小时前
2025年渗透测试面试题总结-66(题目+回答)
java·网络·python·安全·web安全·adb·渗透测试
脑子慢且灵6 小时前
[JavaWeb]模拟一个简易的Tomcat服务(Servlet注解)
java·后端·servlet·tomcat·intellij-idea·web
Empty_7776 小时前
SELinux安全上下文
linux·服务器·安全
华仔啊7 小时前
SpringBoot 中 6 种数据脱敏方案,第 5 种太强了,支持深度递归!
java·后端