You need to enable JavaScript to run this app. 如何通过shell脚本或Python对文本行指定部分内容进行排序
优惠活动
大模型
产品
解决方案
定价
更多

如何通过shell脚本或Python对文本行指定部分内容进行排序

解决方案

你可以通过Python或者Shell脚本快速实现该需求,两种实现方式如下:

Python 实现

思路:逐行读取文件,拆分每行得到第三个字段后,将字段内的键值对按冒号前的数字升序排序,再重新拼接输出即可。

# 替换为你的输入、输出文件路径
input_path = "input.txt"
output_path = "output.txt"

with open(input_path, "r", encoding="utf-8") as f_in, open(output_path, "w", encoding="utf-8") as f_out:
    for line in f_in:
        line = line.strip()
        if not line:
            f_out.write("\n")
            continue
        parts = line.split(";")
        # 处理第三个字段(索引为2)
        kv_list = parts[2].split()
        # 按冒号前的数字升序排序
        kv_list.sort(key=lambda x: int(x.split(":")[0]))
        parts[2] = " ".join(kv_list)
        # 拼接回原行写入
        f_out.write(";".join(parts) + "\n")

执行方法:将上述代码保存为sort_kv.py,和待处理文件放在同目录下,执行python3 sort_kv.py即可,不会修改原文件,结果会输出到指定的输出文件中。

Shell 实现(基于GNU Awk)

Linux环境下可以直接用awk一行命令完成处理:

awk 'BEGIN{FS=OFS=";"} {
    split($3, kv_arr, " ")
    delete num_map
    for (i in kv_arr) {
        k = kv_arr[i]
        sub(/:.*/, "", k)
        num_map[k+0] = kv_arr[i]
    }
    sorted_str = ""
    PROCINFO["sorted_in"] = "@ind_num_asc"
    for (k in num_map) {
        sorted_str = sorted_str (sorted_str ? " " : "") num_map[k]
    }
    $3 = sorted_str
    print
}' input.txt > output.txt
  • 注意:macOS默认自带的awk不是GNU版本,需要先执行brew install gawk,将上述命令中的awk替换为gawk再执行即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 11:15:02