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

求助:按混合格式日期字段对文本文件排序

解决混合日期格式的文本排序问题

你的sort命令无法生效,核心问题是日期字段存在**两位年份(如13、14)和四位年份(如2013)**的混合格式,原命令中-k 4.8,4.11仅能匹配四位年份的字段,两位年份的位置完全不对应,导致排序逻辑混乱。

以下是两种可行的解决方法:

方法一:用awk统一日期格式后排序

先通过awk将所有日期的年份转换为四位格式,再执行排序:

awk -F '+' '{
    split($4, d, "/");
    if (length(d[3]) == 2) d[3] = "20" d[3];
    $4 = d[1] "/" d[2] "/" d[3];
    print $0
}' Test.txt | sort -t '+' -k 4.8,4.11 -k 4.4M -k 4.1,4.2 -b

逻辑说明:

  • 以+为分隔符拆分每行内容,提取第四个字段(日期)
  • 将日期按/拆分为月、日、年三个部分
  • 判断年份长度,若为两位则自动补全为20xx格式
  • 重新组合日期字段后输出,再用你原本的sort规则排序

方法二:用sed预处理日期后排序

通过sed正则替换,直接将两位年份转换为四位,再执行排序:

sed 's/\(\/[0-9][0-9]\)$/\/20\1/' Test.txt | sort -t '+' -k 4.8,4.11 -k 4.4M -k 4.1,4.2 -b

逻辑说明:

  • 正则匹配每行末尾的/xx格式两位年份,替换为/20xx
  • 统一年份格式后,原sort命令即可正常按年、月、日的顺序排序

最终排序结果:

Canada Goose + 1x03 + For the Triumph of Evil + Sep/30/2013
New Family + 3x03 + Double Date + Oct/01/2013
Rucksack + 10x03 + Everybody's Crying Mercy + Oct/03/2013
Test + 4x01 + Season 4, Episode 1 + Jun/01/2014

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 15:26:06