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

Shell脚本适配:按表名+日期分组获取最大后缀文件

解决Shell脚本按表名+日期分组取最大后缀文件的问题

需求说明

遍历目录中文件名格式为tablename_14位日期_nn的文件,按表名+日期的组合分组,返回每组中后缀数字nn最大的文件。

示例文件

firsttable_20230112093000_1
firsttable_20230112093000_2
firsttable_20230112093000_3
firsttable_20230112093000_4
firsttable_19990202090000_1
firsttable_19990202090000_2
secondtable_20220112090000_1
secondtable_20220112090000_2
secondtable_20220112090000_3

期望结果

firsttable_20230112093000_4
firsttable_19990202090000_2
secondtable_20220112090000_3

问题分析

原脚本仅按表名作为分组依据,忽略了同表名不同日期的情况,导致部分分组结果被遗漏。

解决方案

不需要复杂正则,利用文件名固定的下划线分隔格式,用awk就能高效实现分组统计:

基础版脚本(当前目录)

ls | awk -F'_' '{
    key = $1 "_" $2
    if ($3 > max[key]) {
        max[key] = $3
        file[key] = $0
    }
} END {
    for (k in file) print file[k]
}'

进阶版(指定目录+格式校验)

如果需要遍历指定目录,同时过滤不符合tablename_14位日期_nn格式的文件,可以用:

find /目标目录路径 -type f | awk -F'_' '
    length($2) == 14 && $3 ~ /^[0-9]+$/ {
        key = $1 "_" $2
        if ($3 > max[key]) {
            max[key] = $3
            file[key] = $0
        }
    }
END {
    for (k in file) print file[k]
}'

脚本解释

  1. -F'_':把文件名按下划线拆分为3个字段,分别对应表名、14位日期、后缀数字
  2. key = $1 "_" $2:用「表名+日期」作为唯一分组标识
  3. 遍历每个文件时,对比当前后缀数字和该分组已记录的最大值,更新最大值和对应文件名
  4. 最后遍历所有分组,输出每组的目标文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 23:31:46