个人笔记(linux/sort与uniq命令)

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 避免编码问题


3. 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
 
  

4. 组合排序技巧

复杂排序场景

# 按第二列数字降序,第三列字母升序
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 码 排序。规则如下:

  1. 比较第一个字符,ASCII 码小的排前面(如 'a' < 'b')。

  2. 如果第一个字符相同,比较第二个字符,以此类推。

  3. 如果所有字符都相同,较短的字符串排前面(如 "abc" < "abcd")。

  4. 字母序是逐字符比较 ASCII 码,不是按字母表顺序(但通常结果类似)。

  5. 短字符串优先(如果前面字符相同,如 "abc" < "abcd")。

  6. 大写字母排在小写字母前面(如 "A" < "a"),但你的例子全是小写,不影响。

  7. 数字字符的 ASCII 码 < 大写字母 < 小写字母(如 '0'=48,'A'=65,'a'=97)。

  8. 例子: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
     

你可能感兴趣的:(个人笔记(linux/sort与uniq命令))