• 【shell】数据文件分割


    有时候我们必须把数据文件分割为更小的文件,这样方便我们邮件发送或者查看文件内容。split命令则可以用来分割文件。

    一、根据大小来分割文件


    1.一般分割

    例如:现在有文件tmp.log,大小为:3680k,我们以1000k为单位分割该文件,在split命令中,除了k(KB),我们还可以使用M(MB)、G(GB)、c(byte)、w(word)

    Linux:/qinys/data # split -b 1000k tmp.log

    image


    2.分割时指定后缀

    在分割时,默认使用字母后缀,我们可以给文件名指定数字后缀,使用-d选项,此外,-a length可以指定后缀长度:

    Linux:/qinys/data # split -b 1000k tmp.log -d -a 2

    image

    3.分割时候指定前缀

    我们分割文件的时候为了区分那些是原始文件,哪些是分割后的文件,我们使用前缀来区分,以下在分割后的文件名之前添加fg_

    Linux:/qinys/data # split -b 1000k tmp.log -d -a 2 fg_

    image

    二、根据行数来分割


    现在存在数据文件tmp.log,数据总记录数为:31346

    以下是根据文件记录数来拆分文件,以10000条记录为单位进行拆分

    Linux:/qinys/data # split -l 10000 tmp.log -d -a 2 row_

    image


    三、根据内容拆分


    现在存在文件tmp1.log,文件内容如下所示:

    image

    我们现在想把每个ping的结果分别存储到各个文件,以便查看;

    命令如下:

    Linux:/qinys/data # csplit tmp1.log /ping/ -n 2 -s {*} -f ping -b "%02d.log"

    执行结果如下:

    image

    命令解释:

    • /ping/ 用来匹配特定的行,分割从此处开始;它从当前行(第一行)一直复制到(但不包括)包含ping的行
    • {*} 表示匹配重复执行分割操作,直到文件末尾为止。可以使用{整数}的形式来指定分割的次数
    • -s 是命令进入静默模式,不打印其他信息
    • -n 指定分割后的文件名的数字个数,例如:01,02,03等
    • -f 指定分割后的文件名前缀
    • -b 指定后缀格式,%02d.log表示长度为2位,不足的使用0代替。例如:01,02,03等;可以参照c语言printf参数格式

    四、分割带有扩展名的文件


    上述我们已经将大文件分隔为多个文件存在,但是分割后的文件都没有扩展名,以下是按照在分隔文件后添加扩展名

    现在存在数据文件CUST_INFO.dat(大小为:112M)

    我们使用如下命令进行分割

    split -b 30m CUST_INFO.dat -d -a 2 file_&&ls|grep file_|xargs -n1 -i{} mv {} {}.txt

    命令解释:

    split -b 30m CUST_INFO.dat -d -a 2 file_&&ls 将文件以30M大小进行分割,并且前缀为file_;

    xargs -n1 -i{} mv {} {}.txt 将生成的文件重命名为扩展名为txt的

    分割后结果如下:

    image


  • 相关阅读:
    jQery总结01
    抽象类和接口精华
    JS基础之开篇
    HTML常见元素集锦
    bzoj3626 [LNOI2014]LCA
    bzoj3223 Tyvj 1729 文艺平衡树
    bzoj3196 Tyvj 1730 二逼平衡树
    bzoj3295 [Cqoi2011]动态逆序对
    bzoj3514 Codechef MARCH14 GERALD07加强版
    bzoj3932 [CQOI2015]任务查询系统
  • 原文地址:https://www.cnblogs.com/OliverQin/p/10240222.html
Copyright © 2020-2023  润新知