将大文件分割存储,或者为了提高可读性和生成日志,常常需要对大文件分割处理,刚学 2 个命令,很方便,记下笔记。

$split -b 10k test.log

上面的命令将 test.log 分成大小为 10k,以 xab,xac,xad 这样的命名的文件

$split -b 10k test.log -d -a 5

加上-d参数将会以数字为后缀,-a 是为了指定后缀的长度:x00009,x00029 这样的

$split -b 10k test.log -d -a 5 pre_

加上 pre*这样分割后的文件前缀就变成 pre*了,而不是前面那样以 x 开头了 除了使用 k 的,还可以使用 M(MB),G(GB),c(byte),w(word)。。。 有些时候不是需要按照文件的大小来分割,而是按照文件的行数来分割,那么只要用l 的参数:

$split -l 100 test.log

这样就会按照 100 行为单位进行分割文件。 csplitsplit的一个变体,也很强大。 比如 test.log 的内容是这样的:

test-1
192.168.1.1
192.168.1.3
192.168.1.4
192.168.1.5
test-2
192.168.1.6
192.168.1.7
192.168.1.8
192.168.1.9
test-3
192.168.1.10
192.168.1.11
192.168.1.12
192.168.1.13

执行下面的命令:

$csplit test.log /test/ -n 2 -s {*} -f test -b "%03d.log";

这样文件就会被分割成 test000.log test001.log test002.log test003.log ,文件内容来自 test.log 中的不同的 test 的部分

  • /test/ 匹配一行,也是分分割的开始行(/[REGEX]/)
  • {*} 根据匹配重复执行分割,知道文件末尾,{4}这样表示分割 4 次
  • -n 指定分割文件后缀的数字个数
  • -s 静态模式,不打印其他信息
  • -f 制定分割文件前缀
  • -b 指定分割文件的后缀,类似于 preintf 的参数形式

转载请注明: 转载自Ryan 是菜鸟 | LNMP 技术栈笔记

如果觉得本篇文章对您十分有益,何不 打赏一下

谢谢打赏

本文链接地址: Linux 分割文件和数据

知识共享许可协议 本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可