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

请求编写Linux脚本:按行数分割订单文件且订单不跨文件

零售订单文件智能分割脚本实现

完全可以用Linux下的awk脚本实现这个需求,下面是针对你的场景编写的脚本,满足「同一订单不拆分到多个文件」「每个子文件最多指定行数」的要求(假设单个订单的记录数不超过最大行数限制)。

分割脚本

#!/bin/bash

# 配置参数
MAX_LINES=5          # 每个子文件的最大记录行数(不含表头)
INPUT_FILE="orders.csv"  # 输入的订单文件
OUTPUT_PREFIX="sub_file" # 输出子文件的前缀

# 使用awk处理分割
awk -v max_lines="$MAX_LINES" -v prefix="$OUTPUT_PREFIX" '
BEGIN {
    file_num = 1
    current_lines = 0
    # 初始化第一个输出文件并写入表头
    output_file = prefix file_num
    getline header
    print header > output_file
}

# 处理数据行
NR > 1 {
    current_order = $1
    # 如果是新订单,先统计该订单的总记录数
    if (current_order != prev_order) {
        order_count = 0
        temp_line = $0
        # 预读后续行统计当前订单的总条数
        while (getline next_line > 0) {
            if (next_line ~ "^" current_order) {
                order_count++
                temp_lines[order_count] = next_line
            } else {
                ungetline(next_line)
                break
            }
        }
        order_count++  # 加上当前行
        temp_lines[1] = $0

        # 检查当前文件剩余行数是否能容纳整个订单
        if (current_lines + order_count > max_lines) {
            # 切换新文件并写入表头
            file_num++
            output_file = prefix file_num
            print header > output_file
            current_lines = 0
        }

        # 写入当前订单的所有行
        for (i=1; i<=order_count; i++) {
            print temp_lines[i] > output_file
            current_lines++
        }
        prev_order = current_order
    }
}
' "$INPUT_FILE"

脚本说明

  • 参数配置:开头的变量可按需修改,比如调整最大行数、输入文件路径或输出文件前缀。
  • 表头处理:每个新生成的子文件都会自动写入原始文件的表头。
  • 订单完整性保障:遇到新订单时,先预读统计该订单的所有记录数,避免拆分订单。
  • 文件切换逻辑:如果当前文件剩余行数不足以容纳整个订单,自动创建新文件并重置行数计数器。

使用步骤

  1. 将脚本保存为split_orders.sh,赋予执行权限:chmod +x split_orders.sh
  2. 确保输入文件已按order_nu排序(未排序的话先执行sort -k1,1 orders.csv > sorted_orders.csv,再修改脚本中的INPUT_FILE为排序后的文件)
  3. 运行脚本:./split_orders.sh

示例验证

针对你提供的示例输入,设置MAX_LINES=5运行脚本后,会生成:

  • sub_file1:包含订单1(3行)+订单2(2行),共5条记录
  • sub_file2:包含订单3(2行)
  • sub_file3:包含订单4(5行)
  • sub_file4:包含订单5(3行)
    完全符合你的预期输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 02:15:42