在某些情况下,必须把文件分割成多个更小的片段。如今我们分割文件的目的比如:提高可读性、生成日志、通过Email发送文件等等。

假设我们有一个erro.log的测试文件,其大小为14M。你可以将该文件分割成多文件,例如:

[root@gameserver1 file]# split -b 5M erro.log    #-b 大小选项
[root@gameserver1 file]# ls
erro.log xaa xab xac
[root@gameserver1 file]# du -hs *
14M erro.log
5.0M xaa
5.0M xab
3.8M xac

上面的命令将erro.log文件分割成多个文件,以每个文件5M的大小分割。这些文件以xaa、xab、xac的形式命名。这表明他们都有一个字母后缀。如果想以数字为后缀,可以另外使用-d参数。此外,使用-a 可以指定后缀的长度:

[root@gameserver1 file]# split -b 5M erro.log -d -a 4                   #-d以数字为后缀  -a 4 表示后缀为4位
[root@gameserver1 file]# ls
erro.log x0000 x0001 x0002
[root@gameserver1 file]# du -hs *
14M erro.log
5.0M x0000
5.0M x0001
3.8M x0002

除了M(MB)后缀,我们还可以使用G(GB)、c(byte)、w(word)、k(KB)等后缀。

刚刚说了为分割的文件名指定了后缀,那么也可以给分割的文件名指定前缀。之前分割的文件名前缀都有一个x,我们可以通过提供一个前缀名来使用自己的文件名前缀,例如:

[root@gameserver1 file]# split -b 5M erro.log -d -a 5 erro_log        #erro_log 指定的切割后的文件前缀
[root@gameserver1 file]# ls
erro.log erro_log00000 erro_log00001 erro_log00002
[root@gameserver1 file]# du -hs *
14M erro.log
5.0M erro_log00000
5.0M erro_log00001
3.8M erro_log00002

如果不想按照数据块大小,而是需要根据行数来分割文件的话,可以使用: -l 行数 的格式来进行分割:

[root@gameserver1 file]# split -l 99999 erro.log     #按照每个文件99999行来进行分割
[root@gameserver1 file]# ls
erro.log xaa xab xac
[root@gameserver1 file]# du -hs *
14M erro.log
6.7M xaa
6.7M xab
456K xac

另外还有一个工具是csplit。他能够根据指定的条件和字符串匹配选项对日志文件分割。来看看这个工具是如何运作的。

csplit是split工具的一个变体。split只能够根据数据大小或行数进行分割文件,而csplit可以根据文本自身的特点进行分割。是否存在某个单词或文本内容都可以作为分割文件的条件。例如我有一个host.txt文件:

我现在需要将这个文件分割成server1.txt、server2.txt和server3.txt,这些文件的内容分别取自原文件host.txt中不同的server部分。那么,可以使用下面的方法来实现:

[root@gameserver1 file]# csplit host.txt /server/ -n 2 -s {*} -f server -b "%02d.txt" ; rm server00.txt
rm:是否删除普通空文件 "server00.txt"?y
[root@gameserver1 file]# ls
host.txt server01.txt server02.txt server03.txt
[root@gameserver1 file]# cat server01.txt
server-1
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
192.168.1.6
192.168.1.7
[root@gameserver1 file]# cat server02.txt
server-2
192.168.2.1
192.168.2.2
192.168.2.3
192.168.2.4
192.168.2.5
192.168.2.6
192.168.2.7
[root@gameserver1 file]# cat server03.txt
server-3
192.168.3.1
192.168.3.2
192.168.3.3
192.168.3.4
192.168.3.5
192.168.3.6
192.168.3.7

有关命令的详细说明:

csplit host.txt /server/ -n 2 -s {*} -f server -b "%02d.txt" ; rm server00.txt

/server/      用来匹配某一行,分割过程即从此处开始。

-n              指定分割后的文件名后缀的数字个数,例如:01、02、03等。

-s              使命令进入静默模式,不打印其它信息

{*}             表示根据匹配重复执行分割操作,直到文件末尾为止。也可以用 {整数} 的方式来指定分割执行的次数。

-f               指定分割后的文件名的前缀(在上面的例子中server就是前缀)。

-b              指定后缀格式。例如%02d.txt,类似于C语言中printf的参数格式。在这里 文件名 = 前缀 + 后缀 = server + %02d.txt。

因为分割后的第一个文件没有内容(匹配的单词就位于文件的第一行中),所以我们删除了server00.txt。

综上所述:

split,可以根据数据大小和行数来进行分割

csplit,可以根据文本自身的特点进行分割

分割文件和数据(linux)的更多相关文章

  1. split分割文件与数据

    split主要用途:在之前计算机发展的时候,我们必须分割文件,才能将大量数据放入多张软盘中,而今我们分割文件有了其他的目的,比如提高可读性,生成日志以及发送有大小限制的E-mail附件. 工作原理:s ...

  2. Linux split命令参数及用法详解---linux分割文件命令

    转载自:http://blog.csdn.net/xiaoshunzi111/article/details/52173994 功能说明:分割文件. Split:按指定的行数截断文件 格式: spli ...

  3. Linux命令(十二) 分割文件 split 合并文件 join

    一.分割文件 split 命令介绍 当处理文件时,有时需要将文件做分割处理,split 命令用于分割文件,可以分割文本文件,按指定的行数分割,每个分割后的文件都包含相同的行数.split 可以分割非文 ...

  4. Java-->利用文件指针分割文件

    --> 大体上和字节流分割的方式没什么区别,只是加入文件指针确定要开始分割的位置... package com.dragon.java.splitmp3; import java.io.File ...

  5. 字符设备驱动1:新的方式添加cdev + 在open函数中将文件私有数据指向设备结构体

    本例中,驱动入口处,使用cdev_add添加驱动,这点也可与字符设备驱动0:一个简单但完整的字符设备驱动程序对比一下. 另外主要讲xx_open实现文件私有数据指向设备结构体. 引子: 偶然看到,在j ...

  6. hadoop学习;大数据集在HDFS中存为单个文件;安装linux下eclipse出错解决;查看.class文件插件

    sudo apt-get install eclipse 安装后打开eclipse,提示出错 An error has occurred. See the log file /home/pengeor ...

  7. 十二、文件和目录——Linux文件系统结构

    12.1 Linux文件系统结构 12.1.1 文件操作基本元素 文件操作相关的最基本元素是:目录结构,索引节点和文件的数据本身 目录结构(目录项) 索引节点(i 节点) 文件的数据 12.1.2 文 ...

  8. Oracle使用超大SQL脚本文件恢复数据问题记录

    在以前获取的Oracle数据库备份一般都是dmp文件,创建表空间和用户就直接使用imp或者impdp导入即可. 这一次遇到的情况比较特殊,对方提供数据时给我的是使用SQLPlus导出的SQL脚本文件, ...

  9. hive数据库从文件插入数据得到结果NULL?

    今天第一次接触hive这个东东,跟着教程走,当把本地文件的数据装载到新建的hive的表中时,得到的结果是NULL,如图: 也不知道为什么,初次接触,对它的这个构造还不是很熟悉,看一下建表语句: 解决: ...

随机推荐

  1. 【转】Linux虚拟终端命令Screen用法详解

    转自 http://www.linuxidc.com/Linux/2013-07/87415.htm 在使用ssh或者telnet登录远程主机后,执行一些耗时的命令,如果此时ssh或者telnet中断 ...

  2. [GX/GZOI2019]特技飞行(扫描线+置换)

    感觉是6题中最难的一题,其实这题是一个二合一: 第一问:给定平面上若干点和k个关键点,关键点覆盖一个45°倾斜的正方形范围r,求有多少点被至少一个关键点覆盖.这个可以曼哈顿转切比雪夫距离,然后再扫描线 ...

  3. flask 完成简单查询请求处理,及跨域

    文章大纲 flask通用项目结构 flask 简介 主体代码逻辑 flask 跨域问题的处理 flask 日志 flask 微服务Flask-RESTful 启动服务命令 flask通用项目结构 | ...

  4. locate及find查找命令

    在文件系统上查找符合条件的文件:       实现工具:locate,find locate:       依赖于事先构建好的索引库:       系统自动实现(周期性任务):       手动更新数 ...

  5. 【转】Vim命令合集

    Vim命令合集 命令历史 以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令. 启动vim 在命令行窗口中输入以下命令即可 vim 直接启动vim vim filena ...

  6. android完整资讯App、Kotlin新闻应用MVP + RxJava + Retrofit + Dagger2、优雅区间选择器等源码

    Android精选源码 Android完整资讯客户端源码 android展示注册进度效果源码 Android Wifi热点数据传输Socket 通信示例源码 Android Dota的辅助信息app源 ...

  7. [LC] 250. Count Univalue Subtrees

    Given a binary tree, count the number of uni-value subtrees. A Uni-value subtree means all nodes of ...

  8. 谷歌眼镜、亚马逊音箱,5G时代隐私或将面临更大颠覆

    别看现在的智能手机.平板电脑.可穿戴设备.智能家居等那么火爆,但离开网络它们其实什么也不是.当然,智能终端设备的迭进也是与网络制式不断向前演变相辅相成的,二者算是互相成就.不过也由此衍生出很多问题,尤 ...

  9. [LC] 287. Find the Duplicate Number

    Given an array nums containing n + 1 integers where each integer is between 1 and n (inclusive), pro ...

  10. 细看Java序列化机制

    概况 在程序中为了能直接以 Java 对象的形式进行保存,然后再重新得到该 Java 对象,这就需要序列化能力.序列化其实可以看成是一种机制,按照一定的格式将 Java 对象的某状态转成介质可接受的形 ...