实战|Linux大文件切割
一个执着于技术的公众号
日常工作中需要对日志文件进行分析,当日志文件过大时,Linux中使用vim、cat、grep、awk等这些工具对大文件日志进行分析将会成为梦魇,具体表现在:
执行速度缓慢,文件内容需要加载到内存中,涉及大量的磁盘读;
耗费资源过多,一个4G空间的日志文件需要至少4G的内存,更大的呢?
内容难以复用,分析过滤文件时会用管道对输出文件进行处理,大文件下难以复用;
文件传输困难,大文件需要传输给其他人进行分析,文件太大,全量传输带宽耗费大。
大数据离线处理框架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 1月 17 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 1月 17 16:54 split-line00
-rw-r--r-- 1 root root 14M 1月 17 16:54 split-line01
-rw-r--r-- 1 root root 14M 1月 17 16:54 split-line02
-rw-r--r-- 1 root root 14M 1月 17 16:54 split-line03
-rw-r--r-- 1 root root 14M 1月 17 16:54 split-line04
-rw-r--r-- 1 root root 14M 1月 17 16:54 split-line05
-rw-r--r-- 1 root root 14M 1月 17 16:54 split-line06
-rw-r--r-- 1 root root 14M 1月 17 16:54 split-line07
-rw-r--r-- 1 root root 14M 1月 17 16:54 split-line08
-rw-r--r-- 1 root root 14M 1月 17 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 1月 17 17:03 split-size00
-rw-r--r-- 1 root root 500M 1月 17 17:03 split-size01
-rw-r--r-- 1 root root 500M 1月 17 17:04 split-size02
-rw-r--r-- 1 root root 500M 1月 17 17:04 split-size03
-rw-r--r-- 1 root root 500M 1月 17 17:04 split-size04
-rw-r--r-- 1 root root 500M 1月 17 17:04 split-size05
-rw-r--r-- 1 root root 444M 1月 17 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 1月 17 17:20 two-file-merge
合并方式通过读取文件的方式+输出重定向,对于大文件一样会存在性能的问题,建议根据需要使用。
来源:
https://cloud.tencent.com/developer/article/1576576
往期精彩
如有收获,点个在看,诚挚感谢
实战|Linux大文件切割的更多相关文章
- Linux大文件分割splite
/********************************************************************** * Linux大文件分割splite * 说明: * 编 ...
- Ajax+Java实现大文件切割上传
技术体系:html5(formdata) + java + servlet3.0+maven + tomcat7 <!DOCTYPE html> <html> <head ...
- 大文件切割(split)
split提供两种方式对文件进行切割: 根据行数切割,通过-l参数指定需要切割的行数 根据大小切割,通过-b参数指定需要切割的大小 1.1 根据行数切割 如下以一个3.4G大小的日志文件做切割演示,每 ...
- Linux上大文件切割以及批量并发处理
一.环境说明 某次项目需求中,在Linux上有批文本文件,文件文件都有几个G大,几千万行的数据.无论在Linux和Windows打开这么大的文件,基本上打开要卡半天,更别说编辑. 因此想到使用spli ...
- Linux大文件分割split和合并cat使用方法
本文主要介绍linux下两个命令:split和cat.其中,相信大家都熟悉cat命令,一般用来查看一个文件的内容,但是它还其它的功能,比如这里要介绍的文件合并功能,它可把多个文件内容合并到一个文件中. ...
- PHP搭建大文件切割分块上传功能
背景 在网站开发中,文件上传是很常见的一个功能.相信很多人都会遇到这种情况,想传一个文件上去,然后网页提示"该文件过大".因为一般情况下,我们都需要对上传的文件大小做限制,防止出现 ...
- Linux大文件已删除,但df查看已使用的空间并未减少解决
在我的生活当中遇到磁盘快满了,这时候准备去删除一些大文件 于是我使用ncdu 查看了一下当前系统占用资源比较多的是那些文件,结果一看是elasticsearch的日志文件,好吧,竟然找到源头了,那就把 ...
- Ajax大文件切割传输
文件上传服务器的大小是一定的,所以大文件可以切割成小文件,依次 传输,然后再拼接切割文件上传,用同步方式传输,为了防止异步传输 中多个块同时传输,文件拼接错误,导致文件损坏 前端页面 <!doc ...
- linux大文件读取
在生产环境中有时候可能会遇到大文件的读取问题,但是大文件读取如果按照一般的手法.如cat这种都是对io的一个挑战,如果io扛得住还好,如果扛不住 造成的后果,如服务器内存奔溃,日志损坏 方法一: se ...
随机推荐
- 什么是 NetflixFeign?它的优点是什么?
Feign 是受到 Retrofit,JAXRS-2.0 和 WebSocket 启发的 java 客户端联编程序.Feign 的第一个目标是将约束分母的复杂性统一到 http apis,而不考虑其稳定 ...
- 用 wait-notify 写一段代码来解决生产者-消费者问题?(答案)
请参考答案中的示例代码.只要记住在同步块中调用 wait() 和 notify()方法,如果阻塞,通过循环来测试等待条件.
- jQuery--表单的过滤
1.表单过滤器的介绍 :input 所有表单元素(<input>/<select>/<textarea>/<button>) :text 文本框< ...
- java-面向对象相关
public class DemoMethodOverload { public static void main(String[] args) { int[] array = new int[]{1 ...
- eclipse更换工作空间后,需要修改哪些常用配置
一.对于配置不太了解,第一次配置. 常用 (ps:配置我们在导航栏的 Windows --> preference 里进行配置) 1.首先,我们配置编译环境:Java --> Instal ...
- 学习zabbix(三)
前言: 学习zabbix之前,不得不了解的是SNMP协议 SNMP:简单网络管理协议(Simple Network Protocol) Snmp由两部分组成,监控端和被监控端 监控模式: 主动模式:N ...
- CSDN博客步骤:
在SCDN看到喜欢的文章想转载又嫌一个一个敲太麻烦,干脆直接收藏.但有时候作者把原文章删除或设置为私密文章后又看不了.所以还是转载来的好.这篇博文为快速转载博客的方法,亲测有效,教程如下. 原博客原址 ...
- UP9616移动电源快充案例
第一版的UP9616快充(地址在此 ),从选料到线路板的布局走线都还算不错,实现了当初定下的设计目标,但也有一点小小的遗憾,就是在输出滤波电容这里有点随便了,为了弥补这个遗憾,秉着工程师的" ...
- 网络协议之:socket协议详解之Datagram Socket
目录 简介 什么是Datagram Socket 使用socat来创建UDP服务 使用ss命令来监控Datagram Sockets 使用nc建立和UDP Socket的连接 总结 简介 上一篇文章我 ...
- 记录axios高效率并发的方法
// 首先我的请求是统一管理 方便创建拦截器 export function login(parameter) { return axios({ url: api.Login, ...