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系统!