split命令的作用是根据设置的子文件大小或者行数将大文件分割为小文件,默认的子文件后缀为2个字母,起始值为aa,按照aa,ab,ac的顺序依次递增。当然如果你想要以数字为后缀,可以使用-d参数,起始值为0,-a参数可以设置后缀长度,默认后缀长度为2,这也就是为什么不使用后缀设置参数时,子文件默认后缀是以aa开始的递增值。
使用-b参数将文件分割为最大容量为3k的小文件(-b参数的默认单位是byte):
1
2
3
4
|
[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
|
查看子文件大小:
1
2
3
|
[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行数据来分割:
1
2
3
4
5
6
|
[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
|
查看每个子文件的行数:
1
2
3
4
5
6
|
[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字节的小文件:
1
|
[whx@localhost ~]$
split
-C 500 .
/test/man
.
test
.config
man
.config.
split
|
同样使用-b将文件分割为最大容量为500字节的小文件,并将子文件后缀改为用由000开始的3个数字来表示:
1
|
[whx@localhost ~]$
split
-b 500 -d -a3 .
/test/man
.
test
.config
man
.config.
split
|
比较使用-C和-b的差别:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
[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来实现。
1
2
3
4
5
6
7
8
9
10
11
12
|
[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
#
..
|
使用这两种方式最终合并出来的大文件是完全一致的:
1
2
3
|
[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
|
合并之后可以看到,之前分割出来的小文件依然是存在的,如果你不需要这些小文件可以手动去删除。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
[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
|
本文转自 天黑顺路 51CTO博客,原文链接:http://blog.51cto.com/mjal01/1959227,如需转载请自行联系原作者