[每周一更]-(第8期):超大文件入库处理-文件拆分(1)

在这里插入图片描述

需求分析:
我们需要将超大文本进行入库操作,需要进行拆分拆分操作,该系列分为三篇讲解:

  • 一、文件拆分 - 将大文件拆分小文件,代码操作也能实现,但是没有Linux自带的命令效率高;
  • 二、读写入库 - 将拆分后的小文件,通过读和写协程进行,边读边写入库,批量插入数据库(无序);
  • 三、水平拆分 - 超大入库单表需要水平拆分,否则影响性能(2kw+),通过SQL命令操作,效率高;

一、文件拆分 - 文件切割处理

文件切割,大文件转小文件

  • 将大文件按照行数切割,成小文件,有以下几种方式;
# 常用命令
-b:值为每一输出档案的大小,单位为 byte。
-C:每一输出档中,单行的最大 byte 数。
-d:使用数字作为后缀。
-l:值为每一输出档的行数大小。
-a:指定后缀长度(默认为2)。

# 以下是 split --help中的全部命令

-a, --suffix-length=N 生成长度为 N 的后缀(默认为 2)
  --additional-suffix=SUFFIX 附加一个附加的 SUFFIX 到文件名
-b, --bytes=SIZE 为每个输出文件放置 SIZE 个字节
-C, --line-bytes=SIZE 每个输出文件最多放置 SIZE 个字节的记录
-d 使用从 0 开始的数字后缀,而不是字母
  --numeric-suffixes[=FROM] 与 -d 相同,但允许设置起始值
-x 使用从 0 开始的十六进制后缀,而不是字母
  --hex-suffixes[=FROM] 与 -x 相同,但允许设置起始值
-e, --elide-empty-files 不使用“-n”生成空输出文件
  --filter=COMMAND 写入 shell 命令;文件名为 $FILE
-l, --lines=NUMBER 为每个输出文件放置 NUMBER 行/记录
-n, --number=CHUNKS 生成 CHUNKS 输出文件;见下面的解释
-t, --separator=SEP 使用 SEP 而不是换行符作为记录分隔符;
                        '\0'(零)指定 NUL 字符
-u, --unbuffered 立即使用 '-n r/...' 将输入复制到输出
  --verbose 在每个之前打印一个诊断
                        输出文件打开
  --help 显示此帮助并退出
  --version 输出版本信息并退出

按照行数

  • 每100w条,拆分写入一个文件,如:smallFile_0000/smallFile_0001/smallFile_0002/smallFile_0003…
split -l 1000000 hg19_gnomad211_exome.txt -d -a 4 smallFile_

# 将genome也按行切割
split -l 3000000 hg19_gnomad211_genome.txt -d -a 3 newFile_

按照文件大小(容易截断文本)

  • 每300M数据,拆分写入一个文件,如:newFile_000/newFile_001/newFile_002/newFile_003
split -b 300m hg19_gnomad211_genome.txt -d -a 3 newFile_

切开的文件还能合并

  • 将多个newFile ,再合并为 hg19_gnomad211_exome.txt
cat newFile* > hg19_gnomad211_exome.txt
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值