2019独角兽企业重金招聘Python工程师标准>>>
分割文件和数据
在一些情况下,需要把文件分割成多个小文件,比如为:提高可读性,生成日志,通过E--mail发送文件,以下会看到将文件分隔成不同大小的多种方法。
以下,我们使用dd命令创建一个大小为1G的文件来做测试文件。
# dd if=/dev/zero of=/tmp/data.log bs=1024M count=1
创建好的data.log文件,我们存储在了/tmp目录下。
下面适用split命令对data.log文件进行分割。
# split -b 100M data.log
# ls
data.log xaa xab xac xad xae xaf xag xah xai xaj xak
命令解析:上面的命令将data.log文件分割成多个文件,每个文件大小为100M。这些文件以xaa,xab,xac..的形式命名,这表明它们都有一个字母后缀。如果想用数字为后缀,可以另外使用-d参数。此外,使用-a参数可以指定后缀长度。
# split -b 100M -d -a 4 data.log
# ls
data.log x0000 x0001 x0002 x0003 x0004 x0005 x0006 x0007 x0008 x0009 x0010
为分割后的文件指定文件名前缀
# split -b 100M data.log -d -a 4 data_
# ls
data_0000 data_0001 data_0002 data_0003 data_0004 data_0005 data_0006 data_0007 data_0008 data_0009 data_0010 data.log
如果想通过行数来分割文件,可以使用-l参数
# split -l 10 data.log
命令解析:上面命令把data.log文件分割成多个文件,每个文件10行内容,因为我们使用dd生成的文件,所以该文件内容是0行,你可以自己创建一个50行数据的文件做测试(文件如果很大,分割的文件数会很多,这种情况可以把-l参数的值设置大些。)
另外一个有趣的工具,csplit,它能依据指定的条件和字符串匹配对日志文件进行分割。
csplit是split工具的一个变体。split只能根据文件大小与行数进行分割,而csplit可以根据文本自身的特点进行分割,比如:是否存在某个单词或文本内容都可以作为分割的条件,这里就不详细说明了,有兴趣可以自行查看帮助。