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

如何按日期列拆分带分号分隔符的大文件并生成指定格式的输出文件

分号分隔大文件按日期列拆分AWK解决方案

需求说明

针对分号作为分隔符、自带表头、日期列按升序排列的大文件,按日期列拆分文件,输出文件名格式为01_XX_YYMMDD_YYMMDD.txt。

输入示例

--INPUT 
K;V1.00;;;;;;
P;01.01.2021 00:01;16;EXA;31;TESTA;95.9;XXXX
P;01.01.2021 00:02;33;EXA;31;TESTA;95.9;XYXY
P;02.01.2021 00:54;16;EXB;33;TESTB;94.0;DWAD
P;02.01.2021 00:56;11;EXB;33;TESTB;94.0;DADA
P;03.01.2021 01:00;16;EXC;32;TESTC;94.6;WEWEQ
P;03.01.2021 01:22;16;EXC;32;TESTC;94.6;QEQR
P;04.01.2021 02:39;16;EXD;33;TESTD;94.3;DFAG

预期输出示例

拆分后生成对应日期的独立文件,每个文件仅包含对应日期的行:

  • 文件1:01_XX_210101_210101.txt,包含2条2021年1月1日的记录
  • 文件2:01_XX_210102_210102.txt,包含2条2021年1月2日的记录
  • 文件3:01_XX_210103_210103.txt,包含2条2021年1月3日的记录
  • 文件4:01_XX_210104_210104.txt,包含1条2021年1月4日的记录

可用AWK脚本

awk -F';' '
NR > 1 {
   dt = substr($2,9,2) substr($2,4,2) substr($2,1,2)
   print > ("01_XX_" dt "_" dt ".txt")
}' 你的输入文件名

脚本说明

  • -F';' 指定分号为字段分隔符,适配文件格式
  • NR > 1 跳过第一行表头,仅处理数据行
  • 日期转换逻辑:输入的日期格式为DD.MM.YYYY HH:MM,通过substr函数分别截取年份后两位(第9位开始取2位)、月份(第4位开始取2位)、日期(第1位开始取2位),拼接为YYMMDD格式
  • 每行处理完成后直接写入对应命名的输出文件,因为原文件日期已按升序排列,无需额外排序逻辑

优化版本(拆分文件保留表头)

如果需要把原文件表头写入每个拆分后的文件,同时避免大文件处理时打开过多文件句柄报错,可以使用以下版本:

awk -F';' '
NR == 1 {header = $0; next}
{
   dt = substr($2,9,2) substr($2,4,2) substr($2,1,2)
   fname = "01_XX_" dt "_" dt ".txt"
   if (prev != dt) {
       if (prev) close(prev_fname)
       print header > fname
       prev = dt
       prev_fname = fname
   }
   print > fname
}' 你的输入文件名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:18:03