split命令的作用是根据设置的子文件大小或者行数将大文件分割为小文件,默认的子文件后缀为2个字母,起始值为aa,按照aa,ab,ac的顺序依次递增。当然如果你想要以数字为后缀,可以使用-d参数,起始值为0,-a参数可以设置后缀长度,默认后缀长度为2,这也就是为什么不使用后缀设置参数时,子文件默认后缀是以aa开始的递增值。

 

使用-b参数将文件分割为最大容量为3k的小文件(-b参数的默认单位是byte):

[whx@localhost ~]$ split -b 3k./test/man.test.config  man.config.split
[whx@localhost ~]$ ll man.config.split*
-rw-rw-r--. 1 whx whx 3072 Aug 24 18:45man.config.splitaa
-rw-rw-r--. 1 whx whx  985 Aug 24 18:45 man.config.splitab

 

查看子文件大小:

[whx@localhost ~]$ ll -lhtman.config.split*
-rw-rw-r--. 1 whx whx 3.0K Aug 24 18:50man.config.splitaa
-rw-rw-r--. 1 whx whx  985 Aug 24 18:50 man.config.splitab

 

使用-l参数将文件按照每个子文件最多40行数据来分割:

[whx@localhost ~]$ split -l 40  ./test/man.test.config  man.config.split
[whx@localhost ~]$ llman.config.split*                                
-rw-rw-r--. 1 whx whx 1167 Aug 24 18:47man.config.splitaa
-rw-rw-r--. 1 whx whx 1456 Aug 24 18:47man.config.splitab
-rw-rw-r--. 1 whx whx 1088 Aug 24 18:47man.config.splitac
-rw-rw-r--. 1 whx whx  346 Aug 24 18:47 man.config.splitad

查看每个子文件的行数:

[whx@localhost ~]$ wc -l man.config.splitaaman.config.splitab man.config.splitac man.config.splitad
  40man.config.splitaa
  40man.config.splitab
  40man.config.splitac
  11man.config.splitad
 131total

 

使用-C参数在保证每行数据的完整性的情况下,将文件分割为最大容量为500字节的小文件:

[whx@localhost ~]$ split -C 500    ./test/man.test.config  man.config.split

 

同样使用-b将文件分割为最大容量为500字节的小文件,并将子文件后缀改为用由000开始的3个数字来表示:

[whx@localhost ~]$ split -b 500 -d -a3   ./test/man.test.config  man.config.split

比较使用-C和-b的差别:

[whx@localhost ~]$ ll man.config.spli*                                           
-rw-rw-r--. 1 whx whx 500 Aug 24 19:03man.config.split000
-rw-rw-r--. 1 whx whx 500 Aug 24 19:03man.config.split001
-rw-rw-r--. 1 whx whx 500 Aug 24 19:03man.config.split002
-rw-rw-r--. 1 whx whx 500 Aug 24 19:03man.config.split003
-rw-rw-r--. 1 whx whx 500 Aug 24 19:03man.config.split004
-rw-rw-r--. 1 whx whx 500 Aug 24 19:03man.config.split005
-rw-rw-r--. 1 whx whx 500 Aug 24 19:03man.config.split006
-rw-rw-r--. 1 whx whx 500 Aug 24 19:03man.config.split007
-rw-rw-r--. 1 whx whx  57 Aug 24 19:03 man.config.split008
-rw-rw-r--. 1 whx whx 441 Aug 24 19:02man.config.splitaa
-rw-rw-r--. 1 whx whx 487 Aug 24 19:02man.config.splitab
-rw-rw-r--. 1 whx whx 465 Aug 24 19:02man.config.splitac
-rw-rw-r--. 1 whx whx 488 Aug 24 19:02man.config.splitad
-rw-rw-r--. 1 whx whx 474 Aug 24 19:02man.config.splitae
-rw-rw-r--. 1 whx whx 496 Aug 24 19:02man.config.splitaf
-rw-rw-r--. 1 whx whx 454 Aug 24 19:02man.config.splitag
-rw-rw-r--. 1 whx whx 459 Aug 24 19:02man.config.splitah
-rw-rw-r--. 1 whx whx 293 Aug 24 19:02man.config.splitai

从上面的结果可以看出,使用-b参数,子文件数量是8个,而且每个子文件都是严格按照大小为500字节来分割的,而是用-C参数,子文件数量是9个,每一个子文件大小都小于设置的文件大小数值500字节的,这是因为使用-C不会将一行完整的数据分割成两行,来满足设置的文件大小值,而-b则刚好相反,这也是一般情况下使用-C分割出来的子文件数量会比使用-b分割出来的子文件数量多的原因。

 

将多个子文件合并为一个大文件可以使用>>,如果你想在合并之后自动显示合并后大文件的内容也可以使用tee -a来实现。

[whx@localhost ~]$ cat man.config.splita*>> man.config.b
[whx@localhost ~]$ ll man.config.*
-rw-rw-r--. 1 whx whx 4057 Aug 24 19:21man.config.b
 
[whx@localhost ~]$ cat man.config.split0*|tee -a man.config.c
#
# Generated automatically from man.conf.inby the
# configure script.
#
# man.conf from man-1.6f
#
..

 

使用这两种方式最终合并出来的大文件是完全一致的:

[whx@localhost ~]$ ll man.config.*                            
-rw-rw-r--. 1 whx whx4057 Aug 24 19:21 man.config.b
-rw-rw-r--.1 whx whx 4057 Aug 24 19:21 man.config.c

 

合并之后可以看到,之前分割出来的小文件依然是存在的,如果你不需要这些小文件可以手动去删除。

[whx@localhost ~]$ ll man.config*   
-rw-rw-r--. 1 whx whx 4057 Aug 24 19:21man.config.b
-rw-rw-r--. 1 whx whx 4057 Aug 24 19:21man.config.c
-rw-rw-r--. 1 whx whx  500 Aug 24 19:03 man.config.split000
-rw-rw-r--. 1 whx whx  500 Aug 24 19:03 man.config.split001
-rw-rw-r--. 1 whx whx  500 Aug 24 19:03 man.config.split002
-rw-rw-r--. 1 whx whx  500 Aug 24 19:03 man.config.split003
-rw-rw-r--. 1 whx whx  500 Aug 24 19:03 man.config.split004
-rw-rw-r--. 1 whx whx  500 Aug 24 19:03 man.config.split005
-rw-rw-r--. 1 whx whx  500 Aug 24 19:03 man.config.split006
-rw-rw-r--. 1 whx whx  500 Aug 24 19:03 man.config.split007
-rw-rw-r--. 1 whx whx   57 Aug 24 19:03 man.config.split008
-rw-rw-r--. 1 whx whx  441 Aug 24 19:02 man.config.splitaa
-rw-rw-r--. 1 whx whx  487 Aug 24 19:02 man.config.splitab
-rw-rw-r--. 1 whx whx  465 Aug 24 19:02 man.config.splitac
-rw-rw-r--. 1 whx whx  488 Aug 24 19:02 man.config.splitad
-rw-rw-r--. 1 whx whx  474 Aug 24 19:02 man.config.splitae
-rw-rw-r--. 1 whx whx  496 Aug 24 19:02 man.config.splitaf
-rw-rw-r--. 1 whx whx  454 Aug 24 19:02 man.config.splitag
-rw-rw-r--. 1 whx whx  459 Aug 24 19:02 man.config.splitah
-rw-rw-r--. 1 whx whx  293 Aug 24 19:02 man.config.splitai