You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Linux命令实现反向排序?求sort与AWK用法指导

用sort命令调整中间列排序

你已经用到了sort -k2,2nr,这个命令是按第2列数值降序排序(n表示数值排序,r表示反向)。如果要调整中间某列(比如第3列),只需要把k参数的列号改成目标列即可:

  • 按第3列数值反向排序:sort -k3,3nr file.txt
  • 按第3列字典序反向排序(不需要n参数):sort -k3,3r file.txt
  • 多列组合排序(比如先按第1列正序,再按第3列数值降序):sort -k1,1 -k3,3nr file.txt

-k参数的格式是-k起始列,结束列,如果只写-k3会从第3列一直到行尾都参与排序,加上,3可以限定只按第3列排序,避免干扰。


用AWK实现自定义反向排序

AWK可以通过数组存储行内容,再自定义排序逻辑来实现。以下是两种常见场景的实现:

1. 按指定列(比如第2列)数值反向排序

创建一个脚本文件(比如reverse_sort.awk),内容如下:

# 存储每行内容和目标列的数值
{
    lines[NR] = $0
    nums[NR] = $2
}

END {
    # 冒泡排序:按数值降序排列
    for (i = 1; i <= NR; i++) {
        for (j = i + 1; j <= NR; j++) {
            if (nums[i] < nums[j]) {
                # 交换行内容
                temp_line = lines[i]
                lines[i] = lines[j]
                lines[j] = temp_line
                # 交换对应数值
                temp_num = nums[i]
                nums[i] = nums[j]
                nums[j] = temp_num
            }
        }
    }
    # 输出排序后的行
    for (i = 1; i <= NR; i++) {
        print lines[i]
    }
}

运行命令:awk -f reverse_sort.awk file.txt

2. 按指定列(比如第3列)字典序反向排序

如果是字符串排序,直接提取目标列字符串并比较即可,修改脚本如下:

# 存储每行内容和目标列的字符串
{
    lines[NR] = $0
    strs[NR] = $3
}

END {
    for (i = 1; i <= NR; i++) {
        for (j = i + 1; j <= NR; j++) {
            if (strs[i] < strs[j]) {
                # 交换行内容和对应字符串
                temp_line = lines[i]
                lines[i] = lines[j]
                lines[j] = temp_line
                
                temp_str = strs[i]
                strs[i] = strs[j]
                strs[j] = temp_str
            }
        }
    }
    for (i = 1; i <= NR; i++) print lines[i]
}

AWK的优势是可以实现更复杂的自定义排序逻辑(比如多列组合的复杂判断),而sort命令更适合简单快速的排序需求。

内容的提问来源于stack exchange,提问作者Frank

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 14:10:28