如何通过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
相关产品推荐
相关产品推荐

