2.11 分割文件和数据

2019-03-13  本文已影响0人  拙言_Coder

《Linux Shell 脚本攻略(第 2 版)》读书笔记

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

因为分割后的第一个文件没有任何内容,所以需要删除。而 OS X 系统中则没有必要。

上一篇 下一篇

猜你喜欢

热点阅读