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

如何仅使用Bash按时间戳对文件内的文本行进行排序并写入新文件

方案1:基于时间戳转换的排序(通用性更强,推荐)

该方法会先将每行的日期时间转为Unix时间戳,按时间戳排序后剔除临时字段,不会受时间、日期的位数格式影响,容错率更高:

# input.txt替换为你的源文件名,sorted_output.txt替换为目标文件名
while IFS= read -r line; do
    datetime_part=$(echo "$line" | awk '{print $2" "$1}')
    ts=$(date -d "$datetime_part" +%s 2>/dev/null)
    echo "$ts $line"
done < input.txt | sort -n | cut -d ' ' -f2- > sorted_output.txt

注意:如果你的日期格式为日/月/年而非默认的月/日/年,调整date命令的格式适配参数即可。


方案2:直接多字段排序(效率更高,适合大文件)

如果你的文件所有行格式严格统一,可直接用sort命令指定多个排序键完成排序,无需转换时间戳,处理大文件时性能更好:

sort -k2.7,2.8n -k2.1,2.2n -k2.4,2.5n -k1.1,1.2n -k1.4,1.5n input.txt > sorted_output.txt

参数说明:

  • 按优先级依次排序:日期的年份(第二字段第7-8位)、月份(第二字段第1-2位)、日期(第二字段第4-5位)、小时(第一字段第1-2位)、分钟(第一字段第4-5位)
  • 后缀n表示按数字类型排序,避免字符排序出现的逻辑错误

同样如果日期为日/月/年格式,调换月份和日期的排序键顺序即可。


你提供的样例输入执行后,输出的sorted_output.txt内容如下:

1:19 09/01/21 string3
2:19 09/01/21 string2
15:19 09/01/21 string1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:30:04