Linux分割命令split
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查看。
希望本文对大家有所帮助。
相关文章
在 Linux 中安装 MySQL 客户端
发布时间:2023/05/09 浏览次数:72 分类:MySQL
-
在 Linux 中安装 MySQL 客户端的命令。Linux 和 Unix 等环境作为命令行界面工作,仅在命令的帮助下运行。
在 Linux 中更新 YUM
发布时间:2023/05/04 浏览次数:82 分类:操作系统
-
本文介绍了 Linux 中的 yum update 命令。本文将教我们如何在 Linux 中更新 YUM,以及如何在 Linux 系统上安装、更新、删除、查找和管理包。
在 Linux 中安装 Deb 文件
发布时间:2023/05/04 浏览次数:130 分类:操作系统
-
本文介绍如何在 Linux 中安装 deb 文件。在这篇 Linux 文章中,我们将学习如何在 Linux 系统上安装 .deb(Debian 软件包)文件。 我们还将看到如何在安装后删除 .deb 文件。
Linux 中的 lsof 命令
发布时间:2023/05/04 浏览次数:82 分类:操作系统
-
在这篇 Linux 文章中,我们将了解 Linux 操作系统中的 lsof 命令。 我们将看到如何在 Linux 中将此命令用于不同目的。
Linux 解决不能执行二进制文件问题
发布时间:2023/05/04 浏览次数:187 分类:操作系统
-
在本文中,我们将学习如何在 Linux 中执行二进制文件。 如果 Linux 无法执行二进制文件,我们还将学习如何解决错误。
Linux 中错误 Mesg: Ttyname Failed: Inappropriate Ioctl for Device Error
发布时间:2023/05/04 浏览次数:145 分类:操作系统
-
本文介绍如何在 Linux 中解决 mesg: ttyname failed: inappropriate ioctl for device 错误。在 Linux 中,这个错误是由于默认的 vagrant 配置 config.ssh.shell 与 bash -l 交互导致的。
Linux 中的 ps aux 命令
发布时间:2023/05/04 浏览次数:69 分类:操作系统
-
本篇文章将讨论 Linux 中的 ps aux 命令。如果将 aux 快捷方式与 ps 命令一起使用,它将显示用户需要的最多信息,并可以为您提供系统运行进程的当前状态。
Linux 中的 NTP
发布时间:2023/05/04 浏览次数:137 分类:操作系统
-
本篇文章将讨论 Linux 中的 ntp。NTP 是大多数 IT 基础设施使用的核心协议。 使用它的目的是同步日期和时间信息。
在 Linux 中计算文件中的唯一行
发布时间:2023/05/04 浏览次数:70 分类:操作系统
-
计算文件中的唯一行是 Linux 中的一项常见任务,可以使用多种不同的工具和方法来执行此操作。使用 sort 和 uniq 命令计算文件中的唯一行数