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

使用Awk按表头拆分文件并以表头信息命名输出文件

使用Awk按表头生成命名文件的解决方案

我来帮你搞定这个需求!根据你给出的原始数据格式,我们可以用Awk轻松完成提取日期、生成对应命名文件并写入内容的操作。

完整命令

假设你的原始文件名为input.txt,直接运行以下命令就能实现目标:

awk '{
    if ($0 ~ /^AAABBB[0-9]{8}/) {
        # 从表头行提取日期:跳过前面6个字符的"AAABBB",取后面8位日期
        date_str = substr($0, 7, 8)
        # 拼接出目标文件名
        target_file = "file-" date_str
        # 提取表头行中日期之后的内容(跳过前14个字符:6位前缀+8位日期)
        line_content = substr($0, 15)
    } else {
        # 如果遇到同日期的后续行,把内容追加进去(兼容多行内容的情况)
        line_content = line_content " " $0
    }
    # 将内容写入对应文件
    print line_content > target_file
}' input.txt

代码细节拆解

  • 识别表头行:用正则/^AAABBB[0-9]{8}/精准匹配以AAABBB开头、后跟8位日期的行,这就是每个数据分组的起始标识。
  • 提取日期:substr($0,7,8)从第7个字符开始截取8位,刚好拿到你需要的日期字符串(比如示例里的12042018)。
  • 生成文件名:直接拼接成file-日期的格式,完全符合你的命名要求。
  • 提取并拼接内容:对于表头行,跳过前14个字符(AAABBB+8位日期)得到后续内容;如果是同一日期的多行数据,会自动把新行内容追加到已有内容后。
  • 写入文件:用print line_content > target_file把内容写入对应文件,自动创建文件并覆盖旧内容(如果需要追加可以用>>,不过你的场景用>更合适)。

针对你的示例测试

如果你的原始文件内容是:

AAABBB12042018 Jon238444kdhsljdjd7 Math37378338kdjdkske
AAABBB14042018 Ash81272722mddnd Jay81727272msnsms

运行命令后会生成两个文件:

  • file-12042018,内容为Jon238444kdhsljdjd7 Math37378338kdjdkske
  • file-14042018,内容为Ash81272722mddnd Jay81727272msnsms

完全匹配你的期望!如果后续遇到同一日期跨多行的内容,这个代码也能正确把所有内容合并到对应文件里。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:33:40