简介
sort
和 uniq
都是 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 地址的访问次数。
步骤:
-
提取 IP 地址:
cat /var/log/nginx/access.log | awk '{print $1}' > ips.txt
-
排序并去除重复的 IP 地址:
sort -u ips.txt > unique_ips.txt
-
统计每个 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
的差异,并忽略空白行。
步骤:
-
删除两个文件中的空白行:
sed -i '/^ */d' file1.txt sed -i '/^ */d' file2.txt
-
比较两个文件并忽略重复行:
comm -3 file1.txt file2.txt | grep -v '^$'
结果:
+ line1
- line2
案例三:从多个文件中提取唯一内容
假设您需要从多个文件(file1.txt
、file2.txt
、file3.txt
)中提取唯一内容。
步骤:
-
将多个文件的内容合并到一个文件中:
cat file1.txt file2.txt file3.txt > all_lines.txt
-
排序并去除重复行:
sort -u all_lines.txt > unique_lines.txt
结果:
line1
line2
line3
注意:
-
本文档仅介绍了
sort
和uniq
命令的基本使用方法和常见运维案例,并未涵盖所有功能和参数。 -
在使用
sort
和uniq
命令进行实际操作时,请注意备份文件,以免造成数据丢失。 -
可以根据实际需要组合使用
sort
和uniq
命令,实现更复杂的功能。
希望这份文档能够帮助您更好地了解和使用 sort
和 uniq
命令。