split命令详解

摘要:
在hadoop中,大文件被分割成多个小文件,多个mapreduce任务被并行处理。Linux提供了一个简单易用的分割工具,可以将文件分割成多个小文件。您可以使用文件重定向方法来实现这一点。以下演示显示两个小文件合并为一个文件[root@localhostsplit]#catsplit-size01split-size 02˃两个文件合并[root@localhostsplit]#Ls lhtwo-file-merge-rw-r--r-1 rootroot1000M1在1717:20,双文件合并合并模式使用读取文件+输出重定向的方法。大型文件也存在性能问题。建议根据需要使用。
查阅大文件之痛

日常工作中需要对日志文件进行分析,当日志文件过大时,Linux中使用vim、cat、vim、grep、awk等这些工具对大文件日志进行分析将会成为梦魇,具体表现在:

  • 执行速度缓慢,文件内容需要加载到内存中,涉及大量的磁盘读;
  • 耗费资源过多,一个4G空间的日志文件需要至少4G的内存,更大的呢?
  • 内容难以复用,分析过滤文件时会用管道对输出文件进行处理,大文件下难以复用;
  • 文件传输困难,大文件需要传输给其他人进行分析,文件太大,全量传输带宽耗费大。
如何愉快的破局

大数据离线处理框架hadoop可以处理这些场景,然而hadoop也需要耗费较长的时间进行计算,而且还需要去编写MapReduce任务,诚然这种方法带来更大的难度和挑战。hadoop中是通过将大文件切割成多个小文件,通过多个mapreduce任务做并行处理,Linux提供了一个简单易用的split工具,可以实现将文件切割成多个小文件。

split命令详解

split提供两种方式对文件进行切割:

  • 根据行数切割,通过-l参数指定需要切割的行数
  • 根据大小切割,通过-b参数指定需要切割的大小

2.1 根据行数切割

如下以一个3.4G大小的日志文件做切割演示,每一个文件按照50000行做切割,指定文件名为split-line,-d参数以数字的方式显示

#源文件大小
[root@localhost split]# ls -l 2020011702-www.test.cn.gz -h
-rw-r--r-- 1 root root 3.4G 1月  17 09:42 2020011702-www.test.cn.gz

#按行切割
[root@localhost ~]# split -l 50000 -d --verbose 2020011702-www.test.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@localhost split]# wc -l split-line00
50000 split-line00
[root@localhost split]# wc -l split-line01
50000 split-line01
[root@localhost split]# wc -l split-line9170
50000 split-line9170
[root@localhost split]# wc -l split-line9171
1020 split-line9171

#查看文件大小
[root@localhost split]# 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@localhost ~]# split -b 500M -d --verbose 2020011702-www.test.cn.gz split-size
正在创建文件"split-size00"
正在创建文件"split-size01"
正在创建文件"split-size02"
正在创建文件"split-size03"
正在创建文件"split-size04"
正在创建文件"split-size05"
正在创建文件"split-size06"

[root@localhost split]# 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@localhost split]# cat split-size01 split-size02 >two-file-merge

[root@localhost split]# ls -lh two-file-merge 
-rw-r--r-- 1 root root 1000M 1月  17 17:20 two-file-merge

合并方式通过读取文件的方式+输出重定向,对于大文件一样会存在性能的问题,建议根据需要使用。

免责声明:文章转载自《split命令详解》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇iOS下WebRTC音视频通话(一)DB2存储过程——参数详解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linux中使用mysqldump对MySQL数据库进行定时备份

#!/bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH export LANG=en_US.UTF-8 savedir=/log/database_ba...

Linux配置文件的修改

在很多时候,我们需要对Linux的配置文件进行修改。此时就涉及到了不同Linux发行版的修改配置问题。下面就以主流的几个操作系统(Unix:Solaris,Linux:Ubuntu,Redhat)作为说明,添加当前目录到环境变量,来具体阐述Linux的配置文件修改问题。 修改用户配置文件 此修改仅对修改的用户有效,假如修改的用户是user1,那么仅对us...

Centos7中在线/离线安装DockerCE最新版

Docker在Centos7在线/离线安装 一、在线安装 1、检查系统是否支持,因为Docker 要求 CentOS 系统的内核版本高于 3.10 uname -r 2、确保 yum 包更新到最新 yum update 3、卸载旧版本 yum remove docker docker-common docker-selinux docker-engine...

Docker Volume 之权限管理(一)

摘要:Volume数据卷是Docker的一个重要概念。数据卷是可供一个或多个容器使用的特殊目录,可以为容器应用存储提供有价值的特性。然而Docker数据卷的权限管理经常是非常令人困惑的。本文将结合实例给大家介绍Docker数据卷权限管理中的常见问题和解决方法。 Volume数据卷是Docker的一个重要概念。数据卷是可供一个或多个容器使用的特殊目录,可...

MYSQL问题解决方案:Access denied for user 'root'@'localhost' (using password:YES)

 这两天在MyEclipse中开发Web项目时,连接MySQL数据库,出现问题:Access denied for user 'root'@'localhost' (using password:YES)。         经查找资料发现是root帐户默认不开放远程访问权限,所以需要修改一下相关权限。       解决方案: 打开MySQL目录下的my....

Centos之文件搜索命令find

find [搜索范围] [搜索条件] #搜索文件 find / -name install.log #避免大范围搜索,会非常耗费系统资源 #find是在系统当中搜索符合条件的文件名。如果需要匹配, 使用通配符匹配,通配符是完全匹配。 [root@localhost ~]# ls 222  anaconda-ks.cfg  牛逼  牛牛 [root@loca...