Linux大文件切割
日常工作中需要对日志文件进行分析,当日志文件过大时,Linux中使用vim、cat、grep、awk等这些工具对大文件日志进行分析将会成为梦魇,具体表现在:
-
执行速度缓慢,文件内容需要加载到内存中,涉及大量的磁盘读;
-
耗费资源过多,一个4G空间的日志文件需要至少4G的内存,更大的呢?
-
内容难以复用,分析过滤文件时会用管道对输出文件进行处理,大文件下难以复用;
-
文件传输困难,大文件需要传输给其他人进行分析,文件太大,全量传输带宽耗费大
1 查阅大文件之痛
大数据离线处理框架hadoop可以处理这些场景,然而hadoop也需要耗费较长的时间进行计算,而且还需要去编写MapReduce任务,诚然这种方法带来更大的难度和挑战。hadoop是通过将大文件切割成多个小文件,通过多个mapreduce任务做并行处理,Linux提供了一个简单易用的split工具,可以实现将文件切割成多个小文件。
split提供两种方式对文件进行切割:
-
根据行数切割,通过-l参数指定需要切割的行数
-
根据大小切割,通过-b参数指定需要切割的大小
2.1 根据行数切割
本地没有大日志,就拿小日志进行演示,指定文件名为split-line,-d参数以数字的方式显示
[root@iZ1la3d1xbmukrZ ~]# wc -l err_20190907.log 3427 err_20190907.log [root@iZ1la3d1xbmukrZ ~]# split -l 300 -d --verbose err_20190907.log split-line creating file ‘split-line00’ creating file ‘split-line01’ creating file ‘split-line02’ creating file ‘split-line03’ creating file ‘split-line04’ creating file ‘split-line05’ creating file ‘split-line06’ creating file ‘split-line07’ creating file ‘split-line08’ creating file ‘split-line09’ creating file ‘split-line10’ creating file ‘split-line11’ [root@iZ1la3d1xbmukrZ ~]# ls -lh split-line0[0-9] -rw-r--r-- 1 root root 28K Mar 11 19:50 split-line00 -rw-r--r-- 1 root root 27K Mar 11 19:50 split-line01 -rw-r--r-- 1 root root 24K Mar 11 19:50 split-line02 -rw-r--r-- 1 root root 24K Mar 11 19:50 split-line03 -rw-r--r-- 1 root root 23K Mar 11 19:50 split-line04 -rw-r--r-- 1 root root 18K Mar 11 19:50 split-line05 -rw-r--r-- 1 root root 26K Mar 11 19:50 split-line06 -rw-r--r-- 1 root root 25K Mar 11 19:50 split-line07 -rw-r--r-- 1 root root 24K Mar 11 19:50 split-line08 -rw-r--r-- 1 root root 24K Mar 11 19:50 split-line09
指定行数后会自动做切割,即达到300行之后自动切割,通过-d参数文件名会自动以数字的方式命名,切割后,每个文件大小为24K,此时再对文件进行分析将会方便很多,同时文件数量也会很多,可以增加行数的方式进行切割,方便分析。
2.2 根据大小切割
除了按照行数切割之外,split还支持通过文件大小进行切割,通过指定-b参数指定文件大小进行切割,文件大小单位支持K, M, G, T, P, E, Z,如下以切割为30K演示文件切割过程
[root@iZ1la3d1xbmukrZ ~]# split -b 30K -d --verbose err_20190907.log split-size creating file ‘split-size00’ creating file ‘split-size01’ creating file ‘split-size02’ creating file ‘split-size03’ creating file ‘split-size04’ creating file ‘split-size05’ creating file ‘split-size06’ creating file ‘split-size07’ creating file ‘split-size08’ creating file ‘split-size09’ [root@iZ1la3d1xbmukrZ ~]# ll -h total 916K -rw-r--r-- 1 root root 273K Mar 11 19:47 err_20190907.log -rw-r--r-- 1 root root 28K Mar 11 19:50 split-line00 -rw-r--r-- 1 root root 27K Mar 11 19:50 split-line01 -rw-r--r-- 1 root root 24K Mar 11 19:50 split-line02 -rw-r--r-- 1 root root 24K Mar 11 19:50 split-line03 -rw-r--r-- 1 root root 23K Mar 11 19:50 split-line04 -rw-r--r-- 1 root root 18K Mar 11 19:50 split-line05 -rw-r--r-- 1 root root 26K Mar 11 19:50 split-line06 -rw-r--r-- 1 root root 25K Mar 11 19:50 split-line07 -rw-r--r-- 1 root root 24K Mar 11 19:50 split-line08 -rw-r--r-- 1 root root 24K Mar 11 19:50 split-line09 -rw-r--r-- 1 root root 24K Mar 11 19:50 split-line10 -rw-r--r-- 1 root root 9.8K Mar 11 19:50 split-line11 -rw-r--r-- 1 root root 30K Mar 11 19:52 split-size00 -rw-r--r-- 1 root root 30K Mar 11 19:52 split-size01 -rw-r--r-- 1 root root 30K Mar 11 19:52 split-size02 -rw-r--r-- 1 root root 30K Mar 11 19:52 split-size03 -rw-r--r-- 1 root root 30K Mar 11 19:52 split-size04 -rw-r--r-- 1 root root 30K Mar 11 19:52 split-size05 -rw-r--r-- 1 root root 30K Mar 11 19:52 split-size06 -rw-r--r-- 1 root root 30K Mar 11 19:52 split-size07 -rw-r--r-- 1 root root 30K Mar 11 19:52 split-size08 -rw-r--r-- 1 root root 2.8K Mar 11 19:52 split-size09 drwxr-xr-x 13 root root 4.0K Mar 3 18:03 utils [root@iZ1la3d1xbmukrZ ~]#
2.3 多文件合并
split将大文件切割为多个小文件,如果需要将多个小文件合并为一个文件怎么处理呢?
可以使用文件重定向方式实现,如下演示两个小文件合并为一个文件
右边滑动查看完整命令
[root@iZ1la3d1xbmukrZ ~]# cat split-line00 split-line01 >two-file-merge [root@iZ1la3d1xbmukrZ ~]# ll total 624 -rw-r--r-- 1 root root 279331 Mar 11 19:47 err_20190907.log -rw-r--r-- 1 root root 28017 Mar 11 19:50 split-line00 -rw-r--r-- 1 root root 27386 Mar 11 19:50 split-line01 -rw-r--r-- 1 root root 24354 Mar 11 19:50 split-line02 -rw-r--r-- 1 root root 24409 Mar 11 19:50 split-line03 -rw-r--r-- 1 root root 23434 Mar 11 19:50 split-line04 -rw-r--r-- 1 root root 18207 Mar 11 19:50 split-line05 -rw-r--r-- 1 root root 26139 Mar 11 19:50 split-line06 -rw-r--r-- 1 root root 25057 Mar 11 19:50 split-line07 -rw-r--r-- 1 root root 24536 Mar 11 19:50 split-line08 -rw-r--r-- 1 root root 23926 Mar 11 19:50 split-line09 -rw-r--r-- 1 root root 23863 Mar 11 19:50 split-line10 -rw-r--r-- 1 root root 10003 Mar 11 19:50 split-line11 -rw-r--r-- 1 root root 55403 Mar 11 19:51 two-file-merge
合并方式通过读取文件的方式+输出重定向,对于大文件一样会存在性能的问题,建议根据需要使用
相关文章
- Linux流量监控iftop
- [Linux] linux文件系统学习
- Linux如何查找大文件
- [Linux]linux如何把文件切成多块
- linux(centos8):prometheus使用alertmanager发送报警邮件(prometheus 2.18.1/alertmanager 0.20.0)
- 鸟哥笔记-专题二:Linux文件和文件夹权限差异对比
- linux搭建git服务器
- linux(centos8): 临时关闭/永久关闭交换分区swap?
- linux shell数组定义、元素获取及其长度获取
- linux md5sum获取文件指纹数值并使用cut切割
- FinalShell Linux版安装及教程
- Ubuntu linux安装完成后隐藏linux磁盘挂载点
- Linux下的无名管道
- Linux文件时间属性
- Linux在什么样的从脚本文件数据库sh格式改变sql格式
- linux使用进阶(一)
- 查看linux操作系统
- L36.linux命令每日一练 -- 第五章 Linux信息显示与搜索文件命令 -- locate和updatedb
- L35.linux命令每日一练 -- 第五章 Linux信息显示与搜索文件命令 -- which和whereis
- Linux内核中ideapad-laptop.c文件全解析9
- Linux下搭建File Browser文件管理系统
- 嵌入式Linux开发,Ubuntu22下交叉编译报错:make[1]: aarch64-linux-gnu-gcc: No such file or directory
- geo ftp环境变量 export source ~/.bashrc Linux中filezilla下载ftp文件 ftp.ncbi.nlm.nih.gov linux下载 ftp下载geo非原始数
- Linux安装conda Ubuntu安装conda Linux安装百度云 Ubuntu安装百度云 服务器安装百度云 Linux上传到百度云 Linux上传文件到百度云 Linux从百度云下载
- linux输入子系统
- 首页在linux下的哪个文件夹
- Linux:echo命令详解
- Linux 忘记密码解决方法
- Linux---文件特殊权限
- 使用wget批量下载geo数据集的全部文件 linux下载geo数据 geo处理的数据不是下载原始数据 Linux如何下载ftp文件 geo ftp geo ftp下载 geo下载
- Linux/Android之sar查看IO/CPU占用率(一百零一)