& D1 ^. Q/ O4 M9 ?6 j; Q* t& P当面临将一个大文件进行切分时,linux的split命令是很好的选择。它包含多种参数,支持按行、大小进行切分。) o- U" o9 o, s4 c i5 s
split命令的语法如下:. C! O3 d0 [* d5 N. q6 U1 R0 |+ W/ ?
split [--help][--version][-a ][-b][-C ][-l ][要切割的文件][输出文件名前缀]
" A! `" h' y, Q. t" E对应的参数描述如下:& }! x. n4 A. Z- m4 b8 o. p
-a, --suffix-length=N }# O: g' R, Z9 `" n W- K" n
使用的后缀长度 (默认为 2)
" e+ a3 W( M# Z+ S. _( ?-b, --bytes=SIZE
4 g0 t/ K( @/ O4 q9 g 每个输出文件的字节大小/ ~# j2 d0 Z- u! T- m) k
-C, --line-bytes=SIZE
% F6 N, I- n# {- J- s 每个输出文件每行的最大字节大小5 k7 d' ]2 f! t6 L9 a- F
-d, --numeric-suffixes
- ]" ]4 P1 I- ? 使用数字后缀代替字母后缀) ?8 ^6 i1 z& J* S+ w( T# h! w9 f
-l, --lines=NUMBER% X( b5 w+ a% ~, |' V
设定每个输出文件的行数: k9 s, u9 r6 H6 m) r
--help 显示帮助信息) ]" P! h, J! |8 r/ [
--version% B$ {) Q/ N( Y) _, X% L
显示版本信息6 ^) [ C1 |, E. H0 a+ b, k
下面举几个例子:2 Y H& U8 W7 t/ I% f1 p
1)将文件splitTest.txt分割成多个文件,分割后的每个文件大小为10M。命令:
2 N- o. f! n3 ?- \' c* t' C$ split -b 20m splitTest.txt
3 k, z; r0 f, y' N& {9 A |$ ls1 L, y5 L8 }" b6 b& h+ F
splitTest.txt xaa xab xac T0 E$ ~0 z, l$ {1 Z6 Y4 J
2)将文件splitTest.txt分割成多个文件,分割后的每个文件大小为10M。指定分割后的文件前缀位split,命令:/ j( x" s0 N: o. s4 N, V3 s. K
$ split -b 20m splitTest.txt split
! V8 Q7 m# a, ~% S& }; Y! \; I1 f+ C$ ls
9 A* a. ?5 k$ j) u# V% qsplitaa splitab splitac splitTest.txt! [) ~% _! |/ ~
3)将文件splitTest.txt分割成多个文件,每个文件50万行。命令:
. l& T# U/ r6 F1 B4 w9 n$ wc -l splitTest.txt 5 |1 o _. p2 F9 ]1 e
1502216 splitTest.txt7 J- }1 N: y3 E w: ^) s; A4 v" o) P
$ split -l 500000 splitTest.txt split' i/ n5 n1 O9 T3 J; P
$ ls7 E, S0 S8 A E2 ^# A' ]
splitaa splitab splitac splitad splitTest.txt
( h# }1 Q, I9 a4)将文件splitTest.txt分割成多个文件,每个文件50万行。指定分割后的文件后缀为数字,数字位数为3位,命令:
$ a" X3 J+ b! g" g; o$ wc -l splitTest.txt 3 `7 ?/ g% A6 g; k) h0 @9 R
1502216 splitTest.txt
4 o6 ?" h5 K3 w2 e$ split -l 500000 -d -a 3 splitTest.txt split
2 C% K9 z0 y3 m0 U, ?9 |4 U% \$ ls
( Z* [# I/ _- E. X$ @8 f. Vsplit000 split001 split002 split003 splitTest.txt% c0 K5 {. a' i/ ]& o
可以使用cat命令将切分后的文件合并成新的文件:
/ D: S1 f# R* c+ L3 E$ cat split0* > original.txt |