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

如何在Bash中按特定文件名规则排序文本文件?

Bash实现特定格式文本排序

直接用sort的字段排序功能就能满足需求,这里提供两种可行方案:

方案一:精准指定排序字段范围

sort -t'/' -k4.1,4.3n -k3.1,3.1n input.txt
  • -t'/':把斜杠/设为字段分隔符,将每行拆分为多个字段
  • -k4.1,4.3n:以第4个字段(即100_something.dat这类字符串)的前3个字符(文件名里的100/101/102)做数值排序,作为第一排序优先级
  • -k3.1,3.1n:以第3个字段(目录名里的0/1/2)做数值排序,作为第二优先级

方案二:预处理后排序(更直观)

如果觉得字段范围不好记忆,可先用sed提取关键排序字段到行首,排序后再还原:

sed 's/\(.*dir\/\)\([0-9]\)\/\([0-9]*\)_.*/\3 \2 &/' input.txt | sort -n | cut -d' ' -f3-
  1. sed命令将每行转换成[文件名数字] [目录数字] [原始行内容]的格式,比如原行/path/to/dir/0/100_something.dat,0.6会变成100 0 /path/to/dir/0/100_something.dat,0.6
  2. sort -n按数值排序,此时会先按文件名数字分组,再按目录数字排序
  3. cut去掉行首的两个临时字段,还原成原始行格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 13:02:39