实战|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 ...
随机推荐
- ArrayList分别与LinkedList、Vector、Array的区别
ArrayList与LinkedList的区别 ArrayList底层是一个动态数组,LinkedList底层是双向链表 当随机访问List时(get和set操作),ArrayList比LinkedL ...
- Dubbo 如何停机?
Dubbo 是通过 JDK 的 ShutdownHook 来完成优雅停机的,所以如果使用 kill -9 PID 等强制关闭指令,是不会执行优雅停机的,只有通过 kill PID 时,才 会执行.
- @RequestMapping与@Autowired的作用
@RequestMapping RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上.用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径. @Autowired @ ...
- java-注解相关
注解 概念:说明程序的,给计算机看 注释:用文字描述程序 先了解一些怎么正常javadoc文档 1:给类或者方法添加doc注释 2:通过命令javadoc 执行 类.java文件 新建的类: /** ...
- 在多线程环境下,SimpleDateFormat 是线程安全的吗?
不是,非常不幸,DateFormat 的所有实现,包括 SimpleDateFormat 都不是 线程安全的,因此你不应该在多线程序中使用,除非是在对外线程安全的环境中 使用,如 将 SimpleDa ...
- 学习MySql(一)
一.安装部署mysql 1.安装mysql: # yum -y install autoconf libaio libaio-devel # groupadd mysql # useradd -r - ...
- Java Lambda详解
Lambda表达式是JDK 8开始后的一种新语法形式. 作用:简化匿名内部类的代码写法 简化格式 (匿名内部类被重写方法的形参列表) -> { 重写方法 } Lambda表达式只能简化函数式接口 ...
- Effective Java —— try-with-resources 优先于 try-finally
本文参考 本篇文章参考自<Effective Java>第三版第九条"Prefer try-with-resources to try-finally" The cod ...
- Linux文件管理 | Liunx 常用命令
文件与目录基本操作 目录: 一.显示文件内容 cat 命令 more 命令 less 命令 head 命令 tail 命令 二.文件内容查询(grep) 三.文件查找命令 find 命令 locate ...
- PC端免费高效的同声翻译
疫情期间上网课,对于英语听力较差或者需要观看英文视频,但实际上并没有双语字幕的这种情况下需要找一个实时的翻译工具.虽然说手机上此类软件比较多,但电脑上没有特别合适的应用可以做为一个免费实时翻译.哪怕是 ...