作为运维工程师,处理日志、分析数据是家常便饭。sort
命令是Linux中高效整理文本的神器,能快速对文件内容排序、去重、统计。本文用最简洁的方式,帮你掌握sort
的核心用法。
一、基础排序:秒杀杂乱文本
bash
# 默认按字典序升序排列(文件/输入流)
sort filename.txt
# 示例:对日志时间排序(假设第一列为时间)
sort /var/log/nginx/access.log
二、实用参数:精准控制排序
-
按数值排序
处理数字时,务必用
-n
,避免"10"排在"2"后面!bashsort -n numbers.txt
-
逆序排列
-r
实现从大到小或从Z到A:bashsort -nr large_numbers.txt # 数值逆序
-
按指定列排序
用
-k
选择列,-t
指定分隔符(如逗号、冒号):bash# 按第2列(数值)排序CSV文件 sort -t',' -k2n data.csv
-
去重
-u
快速清理重复行(需先排序):bashsort -u ips.txt > unique_ips.txt
-
忽略大小写
-f
让"Apple"和"apple"视为相同:bashsort -f mixed_case.txt
三、运维实战场景
1. 统计日志IP访问频率
bash
cat access.log | awk '{print $1}' | sort | uniq -c | sort -nr
- 步骤拆解 :
awk
提取IP列sort
排序以便uniq
统计uniq -c
计数sort -nr
按访问量倒序
2. 按内存占用排序进程
bash
ps aux --sort=-%mem | head -n 10
--sort=-%mem
等价于sort -k4nr
(按第4列内存倒序)
3. 合并多个已排序文件
bash
sort -m file1.txt file2.txt > merged.txt
-m
(merge)效率远高于重新排序大文件
四、避坑指南
-
性能优化 :
处理超大文件时,可用
-T
指定临时目录(避免默认分区空间不足):bashsort -T /mnt/big_disk/tmp/ huge_file.txt
-
语言环境 :
非英文排序异常时,设置
LC_ALL=C
禁用本地化规则:bashLC_ALL=C sort file.txt
-
稳定排序 :
若需保留等值行的原始顺序,加
-s
(stable sort)。
五、总结
sort
+ awk
/uniq
等命令组合,是运维分析数据的瑞士军刀。掌握核心参数:
-n
(数值)、-k
(列)、-t
(分隔符)、-r
(逆序)、-u
(去重),即可应对90%的排序需求。
记住: 处理数据前,先用head
或sample.txt
测试命令,避免直接操作大文件翻车!