实战|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 ...
随机推荐
- 什么是 rabbitmq?
采用 AMQP 高级消息队列协议的一种消息队列技术,最大的特点就是消费并不需要确保提供方存在,实现了服务之间的高度解耦
- promethues常用的函数
prometheus函数常用 时数据 (Instant vector): 包含一组时序,每个时序只有一个点,例如:http_requests_total区间数据 (Range vector): 包含一 ...
- Mybatis-Plus 如何实现一对多关系 举例 用户与角色
Mybatis-Plus 一对多Mybatis-Plus 不写一句sql语句实现一对多 首先来看效果 Mysql数据库 用户表 角色表 用户与角色的中间表 中间表如下 将三张表通过Mybatis Pl ...
- html5的video元素学习手札
为了监控移动端视频播放的情况,研究了一下 html5 <video> 标签的属性与事件触发,及其在各系统和各个浏览器的兼容情况 属性与事件 理解清楚属性和事件,才能更好的使用 video ...
- .map() vs .forEach() vs for() 如何选择?
访问原文地址 .map() vs .forEach() vs for() 笔者说,自己基本没怎么用过for()来遍历,主要是用.forEach(). 但是总是会被很多朋友说,这些人认为for()的速度 ...
- 【每日日报】第十八天 ----java最全排序方法
1 今天看了Java的第三章 2 冒泡法排序: package Line; import java.util.Arrays; public class MaoPao { public static v ...
- Python IDLE清屏
在学习和使用Python的过程中,少不了要与Python IDLE打交道.但使用 Python IDLE 都会遇到一个常见而又懊恼的问题--要怎么清屏? 答案是为IDLE增加一个清屏的扩展ClearW ...
- 【C++】二叉树的遍历(前中后)- 迭代法
力扣题目:https://leetcode-cn.com/problems/binary-tree-inorder-traversal/ 今天自己琢磨了很久如何不用递归将二叉树的遍历写出来,于是乎写出 ...
- win内核漏洞提权
WIN系统溢出漏洞提权 漏洞筛选 在整个提权项目中,前提是拿到webshell. 关于系统的溢出漏洞,我推荐两个项目: https://github.com/chroblert/WindowsVuln ...
- 利用Docker快速部署Mysql
写在前面 我又来更新了~~~,今天内容较少,主要是利用Docker快速部署Mysql和初始化数据 利用Docker下载Mysql 简洁明了,在命令提示符中输入 docker pull mysql:8. ...