暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

《这是知识点》之Linux下分割文件并保留文件头

开发者的花花世界 2020-08-30
686

点击上方"开发者的花花世界",选择"设为星标"技术干货不定时送达!


这是一个知识点

方便快捷的给结构化数据文件分割大小并保留文件的表头,几十个G的结构化文件不仅阅读编辑麻烦,而且使用受限,因此高效的分割成小文件并保留头行

1、分割文件

在Linux下,切割和合并文件可以使用split和cat命令来实现。在Windows下,安装Git Bash也可以使用split和cat命令。分割文件的命令是split,通过输入split --help可以查询帮助信息。假设现在有个6GB大小的文件test.log,这里简单介绍下几种分割的方式:

按大小分割文件(此处不推荐)

split -b 500m   文件 newfile

每个文件大小500m,生成的新文件的文件名是newfile后面加上按照aa,ab,ac……来排序的 比如文件有1.4G,那么会切割出3个文件,文件名分别是newfileaa,newfileab,newfileac,没有扩展名 新文件名可以不设置,系统默认新文件以字母x开头,也就是说,如果命令是:

split -b 500m log.txt

那么文件名就是xaa,xab,axc 速度比windows下的那些什么切割软件快太多 同时,-C参数表示按照所有行数加起来的最大字节数进行分割,同样可以使用k或者m作为单位,其实效果和上边的-b差不多,只是在切割时将尽量维持每行的完整性。另外切开的文件还能再合起来,命令是:

cat newfile* > orifile

此处不推荐的原因是因为结构化文件按大小分割会造成结构破坏,故推荐按行分割

按行分割文件

split -l <行数> <目标文件> <切割后的文件前缀>

split -l 5000   文件 newfile

-l参数表示按照行数进行分割,即一个小文件中最多有多少行,-l number可以缩写成-number,上边的命令表示按照5000行一个小文件进行分割。

推荐按行分割文件,能保留行的完整性不破坏结构化文件的结构

2、给分割后的文件插入表头行

Sed是一款流编辑工具,用来对文本进行过滤与替换操作,特别是当你想要对几十个配置文件做统一修改时,你会感受到Sed的魅力!Sed通过一次仅读取一行内容来对某些指令进行处理后输出,所以Sed更适合于处理大数据文件。首先,Sed通过文件或管道读取文件内容,但Sed默认并不直接修改源文件,而是将读入的内容复制到缓冲区中,我们称之为模式空间(pattern space),所有的指令操作都是在模式空间中进行的,然后Sed根据相应的指令对模式空间中的内容进行处理并输出结果,默认输出至标准输出(即屏幕上)。

Sed从文件中读取数据,如果没有输入文件,则默认对标准输入进程数据进行处理,脚本指令是第一个非“-”开头的参数,具体语法格式如下:

sed [选项]...{脚本指令} [输入文件]
选项含义
--version显示sed版本
--help显示帮助文档
-n,--quit,--silent静默输出,默认情况下,sed程序在所有的脚本指令执行完毕后,将自动打印模式空间中的内容,该选项可以屏蔽自动打印。
-e script允许多个脚本指令被执行
-f script-file从文件中读取脚本指令,对编写自动脚本程序很实用。
-i,--in-place慎用,该选项将直接修改源文件
l,N该选项指令l指令可以输出的行长度,l指令为输出非打印字符。
--posix禁用GNU sed扩展功能
-r在脚本指令中使用扩展正则表达式
-s,--separate默认情况下,sed将把输入的多个文件名作为一个长的连续的输入流,而GNU sed则允许把它们当作单独的文件
-u,--unbuffered最低限度的缓存输入和输出

因此,给分割后的文件加表头的方法是:

sed -i "1i 字段,字段,字段,字段"  文件

1i表示第一行之前

3、批量给分割后的文件增加后缀名

由于分割后的文件默认是没有后缀名的,故需要增加后缀名 非常简单,例如CSV后缀

for i in *


do mv $i $i".csv"


done

完成


关注Github:1/2极客[1]

关注博客:御前提笔小书童[2]

关注网站:HuMingfeng[3]

关注公众号:开发者的花花世界

References

[1]
 1/2极客: https://github.com/humingfeng
[2]
 御前提笔小书童: https://blog.csdn.net/qq_22260641
[3]
 HuMingfeng: https://royalscholar.cn

喜欢就点个"在看"呗^_^


文章转载自开发者的花花世界,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论