迹忆博客
当前位置: 主页 > 学无止境 > 操作系统 > 文章

Linux分割命令split

发布时间: 2016-10-09 作者: 迹忆 浏览次数:

split命令作为管道命令家族中的一员,其功能是将一个大文件分割成很多个小文件。有时候为了提高可读性,需要将文件分割成更小的片段。

下面我们来看一下split的用法

# split [OPTION] [INPUT [PREFIX]]

在默认情况下,split是将输入文件以1000行为单位写入输出文件的。除此之外,输出文件默认是以x为前缀,以aa,ab,…依次为文件名。并且其输出文件的目录是在当前目录。

# cd /tmp
# split /etc/termcap
# ll –k
-rw-r--r-- 1 root root 45 Sep 30 19:25 xaa
-rw-r--r-- 1 root root 43 Sep 30 19:25 xab
-rw-r--r-- 1 root root 44 Sep 30 19:25 xac
-rw-r--r-- 1 root root 44 Sep 30 19:25 xad
-rw-r--r-- 1 root root 37 Sep 30 19:25 xae
-rw-r--r-- 1 root root 38 Sep 30 19:25 xaf
-rw-r--r-- 1 root root 42 Sep 30 19:25 xag
-rw-r--r-- 1 root root 39 Sep 30 19:25 xah
-rw-r--r-- 1 root root 45 Sep 30 19:25 xai
-rw-r--r-- 1 root root 40 Sep 30 19:25 xaj
-rw-r--r-- 1 root root 41 Sep 30 19:25 xak
-rw-r--r-- 1 root root 40 Sep 30 19:25 xal
-rw-r--r-- 1 root root 39 Sep 30 19:25 xam
-rw-r--r-- 1 root root 44 Sep 30 19:25 xan
-rw-r--r-- 1 root root 41 Sep 30 19:25 xao
-rw-r--r-- 1 root root 41 Sep 30 19:25 xap
-rw-r--r-- 1 root root 41 Sep 30 19:25 xaq
-rw-r--r-- 1 root root 48 Sep 30 19:25 xar
-rw-r--r-- 1 root root 41 Sep 30 19:25 xas
-rw-r--r-- 1 root root  3 Sep 30 19:25 xat

默认情况下,我们看文件名前缀都是x,文件名称为aa,ab,ac,…。并且除了最后一个文件xat,其它文件中都存有/etc/termcap中的1000行的内容。

对于输出文件的前缀我们可以指定为自己想要的

# split /etc/termcap termcap
-rw-r--r-- 1 root root 45 Sep 30 19:28 termcapaa
-rw-r--r-- 1 root root 43 Sep 30 19:28 termcapab
-rw-r--r-- 1 root root 44 Sep 30 19:28 termcapac
-rw-r--r-- 1 root root 44 Sep 30 19:28 termcapad
-rw-r--r-- 1 root root 37 Sep 30 19:28 termcapae
-rw-r--r-- 1 root root 38 Sep 30 19:28 termcapaf
-rw-r--r-- 1 root root 42 Sep 30 19:28 termcapag
-rw-r--r-- 1 root root 39 Sep 30 19:28 termcapah
-rw-r--r-- 1 root root 45 Sep 30 19:28 termcapai
……

我们看,前缀是不是已经换成了我们指定的termcap。没错,指定前缀就是这么简单——在后面跟上我们想要的前缀即可。

前面我们指定了输出文件的前缀,这里我们来看一下如何改变文件名,也就是后缀,的长度(默认长度是2——aa,ab,…)。

-a LENGTH 制定输出文件的后缀为LENGTH,默认长度是2。

# split –a 3 /etc/termcap termcap
# ll –k
total 908
-rw-r--r-- 1 root root 45 Sep 30 19:30 termcapaaa
-rw-r--r-- 1 root root 43 Sep 30 19:30 termcapaab
-rw-r--r-- 1 root root 44 Sep 30 19:30 termcapaac
-rw-r--r-- 1 root root 44 Sep 30 19:30 termcapaad
-rw-r--r-- 1 root root 37 Sep 30 19:30 termcapaae
……

我们看,长度是不是变为3了。

-l LINES (这里是小写的l而不是大写的L) 指定向每个输出文件中写入的行数,默认是以1000行为单位分割输入文件的。

# split –l 2000 /etc/termcap termcap
# ll –k
-rw-r--r-- 1 root root 88 Sep 30 19:36 termcapaa
-rw-r--r-- 1 root root 88 Sep 30 19:36 termcapab
-rw-r--r-- 1 root root 74 Sep 30 19:36 termcapac
-rw-r--r-- 1 root root 81 Sep 30 19:36 termcapad
-rw-r--r-- 1 root root 85 Sep 30 19:36 termcapae
……

我们看文件的大小比先前都几乎大了一倍。因为先前我们是以默认1000行分割的,现在是2000行。

上面我们都是以行为计量单位来分割输入文件的,现在我们以文件的大小来分割。

-b SIZE 后面可接欲分割成的文件大小,可加单位,例如 b,k,m等。

# ll –k /etc/termcap
-rw-r--r-- 1 root root 789 Jan  7  2007 /etc/termcap
//我们看/etc/termcap文件大小有789k,这里我们指定按照200k分割该文件
# split –b 200k /etc/termcap termcap
# ll –k
-rw-r--r-- 1 root root 200 Sep 30 19:45 termcapaa
-rw-r--r-- 1 root root 200 Sep 30 19:45 termcapab
-rw-r--r-- 1 root root 200 Sep 30 19:45 termcapac
-rw-r--r-- 1 root root 189 Sep 30 19:45 termcapad

我们看结果和我们预期的是不是一样。四个文件大小之和同/etc/termcap的大小是一样的。

-C size 表示在SIZE规定的范围之内尽可能多的将输入文件的内容以行为单位写入输出文件内。如果当再加入某一行的时候该输出文件的内容大小超过了-C指定的大小,那将舍弃这一行,将这一行写入下一个输出文件。还有一种情况就是一行内容的大小本身就超过了-C指定的大小,那会将该行按照-C指定的大小等分成几份分别写入输出文件(比如:有20个字符的一行数据,-C指定大小为6个字符,那会将这一行分成4份,写入四个文件。虽然第四个文件只有2个字符,但是下一行也将从第五个文件开始)。size后面跟的大小和-b选项的相同。

# cat /tmp/split
onmpw
wwwcom
jiyinet
blogorg
# split –C 14 /tmp/split split
# ls
split aa  split ab  split ac //三个文件
# cat split aa
onmpw
wwwcom
# cat split ab
jiyinet
# cat split ac
blogorg

看到结果我们对上面所介绍的-C应该有一个清晰的认识了。下面我们指定-C 3。按照我们上面所介绍的是不是应该有11个输出文件(回车符也算一个字符)。我们来验证一下。

# split –C 3 /tmp/split split
# ll
-rw-r--r-- 1 root root  3 Sep 30 20:26 splitaa
-rw-r--r-- 1 root root  1 Sep 30 20:26 splitab
-rw-r--r-- 1 root root  3 Sep 30 20:26 splitac
-rw-r--r-- 1 root root  3 Sep 30 20:26 splitad
-rw-r--r-- 1 root root  1 Sep 30 20:26 splitae
-rw-r--r-- 1 root root  3 Sep 30 20:26 splitaf
-rw-r--r-- 1 root root  3 Sep 30 20:26 splitag
-rw-r--r-- 1 root root  2 Sep 30 20:26 splitah
-rw-r--r-- 1 root root  3 Sep 30 20:26 splitai
-rw-r--r-- 1 root root  3 Sep 30 20:26 splitaj
-rw-r--r-- 1 root root  2 Sep 30 20:26 splitak

数一数,果然是11个文件。有兴趣的同学可以分别查看每个文件的内容来加深对split –C的认识。

-d 使用数字作为后缀,默认情况下是使用小写字母作为后缀的。

# split –db 300k /tmp/termcap termcap
-rw-r--r-- 1 root root 307200 Sep 30 20:28 termcap00
-rw-r--r-- 1 root root 307200 Sep 30 20:28 termcap01
-rw-r--r-- 1 root root 192703 Sep 30 20:28 termcap02

我们看后缀是不是变了。

好了,说到这我们看在linux下分割文件是不是非常简单,一个split命令就搞定了。关于split的内容就这么多。更详细的说明可以使用info split查看。

希望本文对大家有所帮助。

除非注明转载,本站文章均为原创,欢迎转载,转载请以链接形式注明出处

本文地址: