sort
命令(排序)功能:行排序
核心语法:
sort [选项] [文件]
常用选项:
选项 | 作用 | 示例 |
---|---|---|
-n |
数值排序 | sort -n |
-r |
降序排序 | sort -nr |
-k |
指定排序列 | sort -k2,2n |
-t |
指定分隔符 | sort -t':' -k3n |
-u |
去重(相当于 uniq ) |
sort -u |
典型用法:
# 按第二列数字降序排序
sort -k2,2nr data.txt
# 处理CSV文件(以逗号分隔)
sort -t',' -k3n data.csv
注意事项:
默认按字典序排序(字母顺序,10会排在2前面)
处理中文需设置 LC_ALL=C
避免编码问题
uniq
命令(去重统计)功能:报告或过滤重复行
核心语法:
uniq [选项] [输入文件]
关键选项:
选项 | 作用 | 示例 |
---|---|---|
-c |
统计出现次数 | uniq -c |
-d |
只显示重复行 | uniq -d |
-u |
只显示唯一行 | uniq -u |
必须前置条件:
# 必须先排序!
sort file.txt | uniq -c
示例:
# 统计单词频率(错误示范)
echo -e "apple\norange\napple" | uniq -c # 错误!输出:
# 1 apple
# 1 orange
# 1 apple
# 正确做法
echo -e "apple\norange\napple" | sort | uniq -c
# 输出:
# 2 apple
# 1 orange
复杂排序场景:
# 按第二列数字降序,第三列字母升序
sort -k2,2nr -k3,3 data.txt
# 处理带标题行的CSV(跳过第1行)
( head -1 data.csv; tail -n +2 data.csv | sort -t',' -k4n )
性能优化:
# 设置本地化加速排序(处理ASCII文本)
LC_ALL=C sort file.txt
补充:
单个sort时排序方式默认按字典序排序
在字母序(Lexicographical Order)下,字符串按 从左到右逐字符比较 ASCII 码 排序。规则如下:
比较第一个字符,ASCII 码小的排前面(如 'a'
< 'b'
)。
如果第一个字符相同,比较第二个字符,以此类推。
如果所有字符都相同,较短的字符串排前面(如 "abc"
< "abcd"
)。
字母序是逐字符比较 ASCII 码,不是按字母表顺序(但通常结果类似)。
短字符串优先(如果前面字符相同,如 "abc"
< "abcd"
)。
大写字母排在小写字母前面(如 "A"
< "a"
),但你的例子全是小写,不影响。
数字字符的 ASCII 码 < 大写字母 < 小写字母(如 '0'
=48,'A'
=65,'a'
=97)。
例子:words.txt数据
apple
Banana
cat
applepie
123
42
Zebra
apple
sort words.txt
输出:
123
42
Banana
Zebra
apple
apple
applepie
cat
text
dffgbf
nfdlvn
sdfgh
sedgg
wedfg
wer
xcef
xcvvaf
sort
命令)echo -e "sdfgh\nsedgg\nwer\nwedfg\nxcef\nxcvvaf\ndffgbf\nnfdlvn" | sort
输出:
dffgbf
nfdlvn
sdfgh
sedgg
wedfg
wer
xcef
xcvvaf