一个执着于技术的公众号

日常工作中需要对日志文件进行分析,当日志文件过大时,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 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主流发行版配置IP总结

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

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

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

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

实战|Linux大文件切割的更多相关文章

  1. Linux大文件分割splite

    /********************************************************************** * Linux大文件分割splite * 说明: * 编 ...

  2. Ajax+Java实现大文件切割上传

    技术体系:html5(formdata) + java + servlet3.0+maven + tomcat7 <!DOCTYPE html> <html> <head ...

  3. 大文件切割(split)

    split提供两种方式对文件进行切割: 根据行数切割,通过-l参数指定需要切割的行数 根据大小切割,通过-b参数指定需要切割的大小 1.1 根据行数切割 如下以一个3.4G大小的日志文件做切割演示,每 ...

  4. Linux上大文件切割以及批量并发处理

    一.环境说明 某次项目需求中,在Linux上有批文本文件,文件文件都有几个G大,几千万行的数据.无论在Linux和Windows打开这么大的文件,基本上打开要卡半天,更别说编辑. 因此想到使用spli ...

  5. Linux大文件分割split和合并cat使用方法

    本文主要介绍linux下两个命令:split和cat.其中,相信大家都熟悉cat命令,一般用来查看一个文件的内容,但是它还其它的功能,比如这里要介绍的文件合并功能,它可把多个文件内容合并到一个文件中. ...

  6. PHP搭建大文件切割分块上传功能

    背景 在网站开发中,文件上传是很常见的一个功能.相信很多人都会遇到这种情况,想传一个文件上去,然后网页提示"该文件过大".因为一般情况下,我们都需要对上传的文件大小做限制,防止出现 ...

  7. Linux大文件已删除,但df查看已使用的空间并未减少解决

    在我的生活当中遇到磁盘快满了,这时候准备去删除一些大文件 于是我使用ncdu 查看了一下当前系统占用资源比较多的是那些文件,结果一看是elasticsearch的日志文件,好吧,竟然找到源头了,那就把 ...

  8. Ajax大文件切割传输

    文件上传服务器的大小是一定的,所以大文件可以切割成小文件,依次 传输,然后再拼接切割文件上传,用同步方式传输,为了防止异步传输 中多个块同时传输,文件拼接错误,导致文件损坏 前端页面 <!doc ...

  9. linux大文件读取

    在生产环境中有时候可能会遇到大文件的读取问题,但是大文件读取如果按照一般的手法.如cat这种都是对io的一个挑战,如果io扛得住还好,如果扛不住 造成的后果,如服务器内存奔溃,日志损坏 方法一: se ...

随机推荐

  1. Spring IoC 的实现机制?

    Spring 中的 IoC 的实现原理就是工厂模式加反射机制. 示例: interface Fruit { public abstract void eat(); } class Apple impl ...

  2. java-Map集合hei

    /* Map集合的特点: Map集合市一个双列集合,一个元素包含两个值:一个key,一个value Map集合中的元素,key和value的数据类型可以相同,也可以不同 Map集合中的元素,key不允 ...

  3. 转:红黑树和AVL树(平衡二叉树)区别

    本文转载至链接:https://blog.csdn.net/u010899985/article/details/80981053 一.AVL树(平衡二叉树) (1)简介 AVL树是带有平衡条件的二叉 ...

  4. 【C++】智能指针详解

    转自:https://blog.csdn.net/flowing_wind/article/details/81301001 参考资料:<C++ Primer中文版 第五版>我们知道除了静 ...

  5. Solution Architect

    Solution Architect How to become a solution architect - CareerExplorer What does a solution architec ...

  6. 如何制作icon-font小图标

    1.首先可以去iconfont.cn阿里巴巴矢量字体库中下载你想要的图标(选择格式为SNG格式). 2.打开iconmoon这个网站(这个样子的),然后点击右上角那个Iconfont App如下图: ...

  7. DIV 上下左右居中黑科技

    <style> #info{height:0px; width:0px;top:50%; left:50%;position:absolute;} #center{background:# ...

  8. w3schools网站的HTML教程之HTML编辑器

    使用记事本或文本编辑器编写 HTML HTML 可以使用如下专业的 HTML 编辑器进行编辑: Microsoft WebMatrix Sublime Text 然而,我们推荐使用记事本(PC)或文本 ...

  9. 手绘模型图带你认识Kafka服务端网络模型

    摘要:Kafka中的网络模型就是基于主从Reactor多线程进行设计的. 本文分享自华为云社区<图解Kafka服务端网络模型>,作者:石臻臻的杂货铺 . Kafka中的网络模型就是基于主从 ...

  10. js读取cookie 根据cookie名称获取值的方法

    //方法1 //存在问题:如果cookie中存在 aaaname=aa;name=bb 获取name的值就会出现错误function getCookie(c_name){ if (document.c ...