LOADING...

加载中请稍等...

loading

Linux每日一篇 - 36 - sort

Linux文本排序神器!掌握sort命令,轻松处理文本数据排序,让数据整理更专业!

sort命令是什么?

sort命令是Linux中用于对文本文件内容进行排序的工具,可以按照字典序、数值、月份等不同方式对文本行进行排序,是数据处理的重要工具。

基本用法

# 按字典序排序文件内容
sort filename

# 按数值排序(适用于数字内容)
sort -n filename

# 反向排序(降序)
sort -r filename

# 按月排序
sort -M filename

# 忽略大小写排序
sort -f filename

# 按特定字段排序
sort -k 2 filename  # 按第2个字段排序
sort -k 2,2 filename  # 按第2个字段排序(仅考虑第2个字段)

# 唯一排序(去除重复行)
sort -u filename

# 随机排序
sort -R filename

实用技巧

# 按多个字段排序
sort -k 1,1 -k 3,3n filename  # 先按第1字段排序,再按第3字段数值排序

# 指定分隔符排序
sort -t ':' -k 2,2 /etc/passwd  # 以冒号为分隔符,按第2个字段排序

# 按不同的数据类型排序
sort -g filename  # 按通用数值排序(支持科学计数法)
sort -h filename  # 按人类可读的大小排序(如1K, 1M, 1G)

# 按特定字符位置排序
sort -k 1.3,1.5 filename  # 按第1字段的第3-5个字符排序

# 输出到文件
sort filename > sorted_file.txt

# 同时去重并排序
sort -u filename

# 按版本号排序
sort -V filename

# 按行长度排序
sort -n -k1,1 filename < <(wc -L filename | awk '{print $1 " " $0}')

# 逆序排列
sort -r -k 2 filename

# 组合使用选项
sort -t ':' -k 3,3n -k 1,1 /etc/passwd

常用场景

# 对日志文件按时间排序
sort -k 1,1 /var/log/access.log

# 按文件大小排序
ls -la | sort -k 5,5n

# 对用户列表按UID排序
sort -t ':' -k 3,3n /etc/passwd

# 对成绩表按分数排序
sort -k 3,3nr grades.txt  # 按第3列数值降序排列

# 去除重复行并排序
sort -u duplicates.txt

# 按IP地址排序
sort -t '.' -k 1,1n -k 2,2n -k 3,3n -k 4,4n ip_list.txt

# 按文件权限排序
ls -la | sort -k 1,1

# 对CSV文件排序
sort -t ',' -k 2,2 customers.csv

# 按进程内存使用排序
ps aux | sort -k 4,4nr

# 对域名按后缀排序
sort -t '.' -k 3,3 domain_list.txt

高级用法

# 使用临时目录(处理大文件时)
sort -T /tmp -u large_file.txt

# 指定缓冲区大小
sort -S 1G filename  # 使用1GB内存缓冲

# 并行处理
sort -s filename  # 稳定排序(保持相等元素的原始顺序)

# 结合其他文本处理命令
cat file1 file2 | sort | uniq > merged_sorted.txt

# 按指定字符数排序
sort -k 1.1,1.3 filename  # 按第1字段的前3个字符排序

# 数值和字典混合排序
sort -k 2,2d -k 3,3g filename  # 第2字段字典序,第3字段数值序

# 处理科学计数法
echo -e "1e2\n3e1\n2e0" | sort -g

# 按文件扩展名排序
ls | sort -t '.' -k 2,2

# 在脚本中使用
#!/bin/bash
# 对成绩进行排序并输出前10名
sort -k 3,3nr student_scores.txt | head -10

实际应用示例

# 示例1: 处理学生成绩表
# 假设文件格式: 姓名 年龄 分数
# 按分数降序排列
sort -k 3,3nr students.txt

# 示例2: 处理系统进程
# 按CPU使用率排序
ps aux --no-headers | sort -k 3,3nr

# 示例3: 处理网络连接
# 按连接数排序
netstat -an | grep ESTABLISHED | awk '{print $5}' | sort | uniq -c | sort -nr

# 示例4: 处理日志文件
# 按IP地址连接数排序
awk '{print $1}' access.log | sort | uniq -c | sort -nr

# 示例5: 处理CSV数据
# 按特定列排序
sort -t ',' -k 3,3n -k 2,2 data.csv

# 示例6: 合并排序多个文件
sort file1.txt file2.txt file3.txt > all_sorted.txt

# 示例7: 处理配置文件
# 按键值对的键排序
grep -v '^#' config.conf | sort

性能优化

# 对于大文件的处理:
# 1. 使用-T选项指定临时目录
sort -T /tmp large_file.txt

# 2. 调整缓冲区大小
sort -S 2G large_file.txt

# 3. 利用多核CPU
# 在现代系统中,sort通常会自动使用多线程

# 4. 使用外部排序算法
# sort命令内部实现了有效的外部排序

关于我

全平台同名”汪多多是只猫”,专注分享实用技术教程,让你的IT学习之路更轻松!

关注我,每天一个Linux命令,轻松入门Linux系统!

头像
汪多多是只猫
失业的运维工程师
热爱开源与分享
微信公众号