2.11 分割文件和数据
2019-03-13 本文已影响0人
拙言_Coder
split
# 将文件分割成多个大小为10KB的文件
$ split -b 10k data.file
$ ls
data.file xaa xab xac xad xae xaf xag xah xai xaj
# 分割后的的文件以数字为后缀(-d),并且指定后缀长度为4(-a)。OS X系统无 -d 选项
$ split -b 10k -a 4 -d data.file
$ ls
data.file x0000 x0001 x0002 x0003 x0004 x0005 x0006 x0007 x0008 x0009
指定分割文件大小时,除了 k(KB)后缀,我们还可以使用 M(MB)、G(GB)、c(byte)、w(word)等后缀。
为分割后的文件指定文件名前缀
$ split -b 10k -a 4 -d data.file split_file
$ ls
split_file0000 split_file0003 split_file0006 split_file0009
split_file0001 split_file0004 split_file0007
split_file0002 split_file0005 split_file0008
根据行数来分割文件
$ split -l 10 data.file
# 分割成多个文件,每个文件包括10行
csplit
csplit 能够依据指定的条件和字符串匹配选项对日志文件进行分割。
$ cat server.log
SERVER-1
[connection] 192.168.0.1 success
[connection] 192.168.0.2 failed
[disconnect] 192.168.0.3 pending
[connection] 192.168.0.4 success
SERVER-2
[connection] 192.168.0.1 failed
[connection] 192.168.0.2 failed
[disconnect] 192.168.0.3 success
[connection] 192.168.0.4 failed
SERVER-3
[connection] 192.168.0.1 pending
[connection] 192.168.0.2 pending
[disconnect] 192.168.0.3 pending
[connection] 192.168.0.4 failed
$ csplit -sf server -n 2 -b "%02d.log" server.log /SERVER/ {*}; rm server00.log
$ ls
server01.log server02.log server03.log server.log
-
-s
静默模式,不打印其他信息。 -
-f
指定分割后的文件名前缀。 -
-n
指定分割后的文件名后缀的数字个数,如 01、02、03 等。 -
-b
指定后缀格式。类似于 C 语言中的 pringf 的参数格式。此选项 OS X 系统中没有。 -
/SERVER/
用来匹配某一行,可以是一个正则表达式。从当前行到匹配行为一次计算。此选项在 OS X 系统中如果第一次匹配到的内容为空的话会舍弃,而 Linux 会为第一个空内容生成一个文件。 -
{*}
表示根据匹配重复执行分割,知道文件末尾为止。可以使用{整数}
的形式来制定分割执行的次数。OS X 系统中只能使用{整数}
形式。
因为分割后的第一个文件没有任何内容,所以需要删除。而 OS X 系统中则没有必要。