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

如何在bash脚本中按Total后的数字对文件内容降序排序并覆盖原文件

实现按Total后数字降序排序并覆盖原文件的方法

原命令失效原因

  • 你使用了&后台执行符而非管道符|,awk既没有指定输入文件,也无法将内容传递给后续的sort命令
  • 未指定sort的排序规则,默认会按行首第一个字段排序,不会匹配Total后的数字
  • 没有将排序后的结果回写原文件的逻辑,自然不会修改原文件内容

正确实现方案

方案1:使用临时文件实现(兼容性最好,无需额外安装工具)

直接执行以下命令即可:

sort -t: -k2,2nr Result_.txt > tmp_sorted && mv tmp_sorted Result_.txt

参数说明:

  • -t: 指定sort的字段分隔符为冒号
  • -k2,2nr 指定仅对第2个字段按数字类型(n)做降序(r)排序
  • 先写入临时文件再移动替换原文件,避免排序过程中断导致原文件损坏

方案2:使用sponge实现(需先安装moreutils包)

如果系统安装了moreutils,可以直接用sponge接管写入原文件的逻辑:

sort -t: -k2,2nr Result_.txt | sponge Result_.txt

适配原有if判断的写法

如果需要保留先判断文件中是否包含冒号的逻辑,修改后的脚本如下:

if grep -q ':' Result_.txt ;then
  sort -t: -k2,2nr Result_.txt > tmp_sorted && mv tmp_sorted Result_.txt
fi

这里grep加了-q参数实现静默匹配,不会输出多余的匹配内容。

内容的提问来源于stack exchange,提问作者Renas K R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 05:15:03