linux命令-split

1. 主要选项

选项 说明
-l 按行拆分文件 -l 300, 每300行一个文件
-b 按大小拆分文件(精确大小) -b 20m,每个文件大小20M;m表示M,其它单位还有k=1024,b=512;
-C 按大小拆分文件(以行为单位) -C 20m,每个文件大小20M,但不把行拆开;
-d 将输出文件后缀改为数字,默认为字母;
-a 设置输出文件后缀的位数 -a 3,后缀位数为3;

2. 按行拆分文件

说明:
输出一组文件:xaa、xab、xac一直排,最多可以排到xzz。
输出文件名前导字符是x,后缀字符是字母。
每个文件300000行。不过作为一个责任的人,忽悠人是不行地。严格来说,并不是每个文件一定都300000行,比如最后一个文件。

命令:

$ split -l 300000 file.txt
$ ls
file.txt xaa xab ...  xaz xba xbb ... xbf

3. 按大小拆分文件(精确大小)

说明:
分拆后每个文件大小为20m。
你也许会说,这20971520就是20M么?可以计算一下:20M= 20 * (2 ** 20) = 20 * 1048576 = 20971520

指定文件SIZE单位时,除了m(代表1M),还可以使用k和b。
k代表1k=2**10=1024。
b代表的不是1bit,也不是1byte,而是512,即0.5k,朕不知道这是什么道理。
注意:由于是精确大小,所以会把同一行的内容拆分到不同文件中。

命令

$ split -b 20m file.txt
$ ls -l
total 2050204
-rw-r----- 1 gxxx336 wheel 1048575993 Nov 26 15:22 file.txt
-rw-r----- 1 gxxx336 wheel   20971520 Nov 27 11:43 xaa
-rw-r----- 1 gxxx336 wheel   20971520 Nov 27 11:43 xab
-rw-r----- 1 gxxx336 wheel   20971520 Nov 27 11:43 xac
...

4 按大小拆分文件(以行为单位)

说明:
通过-b选项拆分的文件大小严格地符合指定的大小。
但这有一个缺点:可能会把一行的内容分拆到两个文件中(那简直是一定要发生的)。
使用-C选项,分拆文件时,不会把行拆分(拆分出来的文件也不精确地等于指定大小)。

命令

$ split -C 20m file.txt
$ ls -l
total 2050212
-rw-r----- 1 gxxx336 wheel 1048575993 Nov 26 15:22 file.txt
-rw-r----- 1 gxxx336 wheel   20971450 Nov 27 11:43 xaa
-rw-r----- 1 gxxx336 wheel   20971257 Nov 27 11:43 xab
-rw-r----- 1 gxxx336 wheel   20971362 Nov 27 11:43 xac
...

5. 输出文件后缀

说明:默认输出文件后缀是字母a-z,可以使用-d选项将后缀改为数字。

命令:

$ split -d -l 300000 file.txt
$ ls
file.txt x00 x01 x02 ... x31

6 输出文件后缀的位数

说明:输出文件后缀默认是位数是2,可以使用-a选项更改其位数。

命令:

$ split -a 3 -d -l 300000 file.txt
$ ls
file.txt  x000 x001 x002 ... x031

这是32个文件,如果后缀位数指定为1位,将会报告后缀用完了,然后只分拆出前10个文件:

$ split -a 3 -d -l 300000 file.txt
split: Output file suffixes exhausted
$ ls
file.txt  x0 x1 x2 x3  x4 x5 x6 x7 x8 x9

7. 输出文件前缀

说明:默认输出文件前缀是字母x,前缀不是用类似-d这种选项指定的,是写在命令最后告诉命令的。

命令:

$ split -d -l 300000 file.txt file.txt.
$ ls
file.txt file.txt.00 file.txt.01 file.txt.02 ... file.txt.31

8. help信息

$ split --help
Usage: split [OPTION]... [FILE [PREFIX]]
Output pieces of FILE to PREFIXaa, PREFIXab, ...;
default size is 1000 lines, and default PREFIX is 'x'.

With no FILE, or when FILE is -, read standard input.

Mandatory arguments to long options are mandatory for short options too.
  -a, --suffix-length=N   generate suffixes of length N (default 2)
      --additional-suffix=SUFFIX  append an additional SUFFIX to file names
  -b, --bytes=SIZE        put SIZE bytes per output file
  -C, --line-bytes=SIZE   put at most SIZE bytes of records per output file
  -d                      use numeric suffixes starting at 0, not alphabetic
      --numeric-suffixes[=FROM]  same as -d, but allow setting the start value
  -x                      use hex suffixes starting at 0, not alphabetic
      --hex-suffixes[=FROM]  same as -x, but allow setting the start value
  -e, --elide-empty-files  do not generate empty output files with '-n'
      --filter=COMMAND    write to shell COMMAND; file name is $FILE
  -l, --lines=NUMBER      put NUMBER lines/records per output file
  -n, --number=CHUNKS     generate CHUNKS output files; see explanation below
  -t, --separator=SEP     use SEP instead of newline as the record separator;
                            '\0' (zero) specifies the NUL character
  -u, --unbuffered        immediately copy input to output with '-n r/...'
      --verbose           print a diagnostic just before each
                            output file is opened
      --help     display this help and exit
      --version  output version information and exit

The SIZE argument is an integer and optional unit (example: 10K is 10*1024).
Units are K,M,G,T,P,E,Z,Y (powers of 1024) or KB,MB,... (powers of 1000).

CHUNKS may be:
  N       split into N files based on size of input
  K/N     output Kth of N to stdout
  l/N     split into N files without splitting lines/records
  l/K/N   output Kth of N to stdout without splitting lines/records
  r/N     like 'l' but use round robin distribution
  r/K/N   likewise but only output Kth of N to stdout

GNU coreutils online help: <https://www.gnu.org/software/coreutils/>
Report split translation bugs to <https://translationproject.org/team/>
Full documentation at: <https://www.gnu.org/software/coreutils/split>
or available locally via: info '(coreutils) split invocation'
posted @ 2020-08-27 16:41  编程驴子  阅读(345)  评论(0编辑  收藏  举报