实战|Linux大文件切割

一个执着于技术的公众号

日常工作中需要对日志文件进行分析,当日志文件过大时,Linux中使用vim、cat、grep、awk等这些工具对大文件日志进行分析将会成为梦魇,具体表现在:

  • 执行速度缓慢,文件内容需要加载到内存中,涉及大量的磁盘读;

  • 耗费资源过多,一个4G空间的日志文件需要至少4G的内存,更大的呢?

  • 内容难以复用,分析过滤文件时会用管道对输出文件进行处理,大文件下难以复用;

  • 文件传输困难,大文件需要传输给其他人进行分析,文件太大,全量传输带宽耗费大。

1 查阅大文件之痛

大数据离线处理框架hadoop可以处理这些场景,然而hadoop也需要耗费较长的时间进行计算,而且还需要去编写MapReduce任务,诚然这种方法带来更大的难度和挑战。hadoop是通过将大文件切割成多个小文件,通过多个mapreduce任务做并行处理,Linux提供了一个简单易用的split工具,可以实现将文件切割成多个小文件。

split提供两种方式对文件进行切割:

  • 根据行数切割,通过-l参数指定需要切割的行数

  • 根据大小切割,通过-b参数指定需要切割的大小


2.1 根据行数切割

如下以一个3.4G大小的日志文件做切割演示,每一个文件按照50000行做切割,指定文件名为split-line,-d参数以数字的方式显示

 右边滑动查看完整命令

#源文件大小
[root@~]# ls -lh happylauliu.cn.gz
-rw-r--r-- 1 root root 3.4G 117 09:42 happylauliu.cn.gz


#按行切割
[root@~]# split -l 50000 -d --verbose happylauliu.cn.gz split-line
正在创建文件"split-line00"
正在创建文件"split-line01"
正在创建文件"split-line02"
正在创建文件"split-line03"
正在创建文件"split-line04"
正在创建文件"split-line05"
正在创建文件"split-line06"
正在创建文件"split-line07"
正在创建文件"split-line08"
正在创建文件"split-line09"
正在创建文件"split-line10"
...
正在创建文件"split-line9168"
正在创建文件"split-line9169"
正在创建文件"split-line9170"
正在创建文件"split-line9171"


#查看切割文件行数确认
[root@~]# wc -l split-line00
50000 split-line00
[root@~]# wc -l split-line9170
50000 split-line9170
[root@~]# wc -l split-line9171
1020 split-line9171


#查看文件大小
[root@~]# ls -lh split-line0[0-9]
-rw-r--r-- 1 root root 14M 117 16:54 split-line00
-rw-r--r-- 1 root root 14M 117 16:54 split-line01
-rw-r--r-- 1 root root 14M 117 16:54 split-line02
-rw-r--r-- 1 root root 14M 117 16:54 split-line03
-rw-r--r-- 1 root root 14M 117 16:54 split-line04
-rw-r--r-- 1 root root 14M 117 16:54 split-line05
-rw-r--r-- 1 root root 14M 117 16:54 split-line06
-rw-r--r-- 1 root root 14M 117 16:54 split-line07
-rw-r--r-- 1 root root 14M 117 16:54 split-line08
-rw-r--r-- 1 root root 14M 117 16:54 split-line09

指定行数后会自动做切割,即达到5000行之后自动切割,通过-d参数文件名会自动以数字的方式命名,切割后,每个文件大小为14M,此时再对文件进行分析将会方便很多,同时文件数量也会很多,可以增加行数的方式进行切割,方便分析


2.2 根据大小切割

除了按照行数切割之外,split还支持通过文件大小进行切割,通过指定-b参数指定文件大小进行切割,文件大小单位支持K, M, G, T, P, E, Z,如下以切割为500M演示文件切割过程

 右边滑动查看完整命令

[root@~]# split -b 500M -d --verbose happylauliu.cn.gz split-size
正在创建文件"split-size00"
正在创建文件"split-size01"
正在创建文件"split-size02"
正在创建文件"split-size03"
正在创建文件"split-size04"
正在创建文件"split-size05"
正在创建文件"split-size06"


[root@~]# ls -lh split-size0*
-rw-r--r-- 1 root root 500M 117 17:03 split-size00
-rw-r--r-- 1 root root 500M 117 17:03 split-size01
-rw-r--r-- 1 root root 500M 117 17:04 split-size02
-rw-r--r-- 1 root root 500M 117 17:04 split-size03
-rw-r--r-- 1 root root 500M 117 17:04 split-size04
-rw-r--r-- 1 root root 500M 117 17:04 split-size05
-rw-r--r-- 1 root root 444M 117 17:04 split-size06

2.3 多文件合并

split将大文件切割为多个小文件,如果需要将多个小文件合并为一个文件怎么处理呢?

可以使用文件重定向方式实现,如下演示两个小文件合并为一个文件

 右边滑动查看完整命令

[root@~]# cat split-size01 split-size02 >two-file-merge


[root@~]# ls -lh two-file-merge
-rw-r--r-- 1 root root 1000M 117 17:20 two-file-merge

合并方式通过读取文件的方式+输出重定向,对于大文件一样会存在性能的问题,建议根据需要使用。

来源:

https://cloud.tencent.com/developer/article/1576576

  往期精彩  

◆  干货 | 手把手教你如何搭建一个私有云盘 

◆  干货 | Linux平台搭建网关服务器

◆  干货 | Linux主流发行版配置IP总结

◆  硬核科普服务器硬盘组成与基本原理

◆  一文带你速懂虚拟化KVM和XEN

◆  什么是集群?看完这篇你就知道啦!

 

                                                如有收获,点个在看,诚挚感谢

posted @   开源Linux  阅读(826)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示