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

如何用单行Linux命令按首列拆分大文件为分块gzip包并自动建目录

单行按首列拆分大文件为分块gzip实现方案

问题场景

是否可以通过单行命令将文件拆分为多个分类存储的gzip分块文件?
现有超大文件data.txt,示例内容:

A somedata 1
B somedata 1
A somedata 2
C somedata 1
B somedata 2

无分类拆分时可直接使用如下命令,生成单块100MB的gzip分块:

cat data.txt | gzip -5 -c | split -d -a 3 -b 100000000 - one_dir/one_dir.gz.

实际需求为按每行第一列的取值分类,自动创建A、B、C三类目录,每个目录下存放对应分类内容的100MB分块gzip文件,目录结构要求:

A/
  A.gz.000
  A.gz.001
  ...
B/
  B.gz.000
  B.gz.001
  ...
C/
  C.gz.000
  C.gz.001
  ...

要求基于cat/awk/gzip/split组合实现,支持自动创建不存在的目录。

可用单行命令

awk '{d=$1; system("mkdir -p " d); print | "gzip -5 -c | split -d -a 3 -b 100000000 - " d "/" d ".gz."}' data.txt

命令逻辑说明

  • 由awk逐行读取源文件,提取每行第一列字段作为分类目录名
  • mkdir -p参数会自动创建不存在的目录,目录已存在时不会抛出错误
  • 同分类的行内容会通过管道传给gzip按指定压缩级别压缩,再流转给split按100MB大小切分,最终输出到对应分类目录下,命名规则完全匹配需求
  • awk会自动维护不同分类对应的管道句柄,处理超大文件时不会占满内存,可稳定运行
  • 若分类值可能包含空格、特殊字符,可使用转义版本避免路径解析错误:
awk '{d=$1; gsub(/'\''/,"'\''\\'\'''\''",d); system("mkdir -p '\''" d "'\''"); print | "gzip -5 -c | split -d -a 3 -b 100000000 - '\''" d "/" d ".gz.'\''"}' data.txt
  • 可按需调整gzip后的压缩级别数字、split -b后的分块大小数值适配不同场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:36:30