按指定行号分割文件


简介

有时,为了更轻松地处理或传输到其他系统,可能需要将大型文件分割成较小的块。在 Linux 中,可以使用 `split` 命令根据指定的行数将文件分割成较小的文件。

`split` 命令是一个用于将文件分割成较小文件的实用程序,这些较小的文件被称为块或片段。`split` 命令读取输入文件,并以指定的大小或指定的行数写入输出文件。默认情况下,`split` 命令创建后缀为 `.x` 的文件,其中 `x` 是从 `aa, ab, ac` 等开始的字母。

如何使用 split 命令?

要根据行数分割文件,请使用以下语法:

$ split -l lines file output_prefix
  • -l 行数 − 指定每个输出文件的行数。

  • 文件 − 你想要分割的输入文件。

  • 输出前缀 − 输出文件的前缀。输出文件将被命名为 output_prefixaa、output_prefixab、output_prefixac 等。

例如,要将文件 bigfile.txt 分割成每个包含 1000 行的块,并且输出文件具有前缀 splitfile,请使用以下命令:

$ split -l 1000 bigfile.txt splitfile

这将创建以下文件:splitfileaa、splitfileab、splitfileac 等。

文件分割示例

以下是一些使用 split 命令按特定行号分割文件的示例:

将文件分割成每个包含 1000 行的块

要将文件 **bigfile.txt** 分割成每个包含 1000 行的块,并且输出文件具有前缀 **splitfile**,请使用以下命令:

$ split -l 1000 bigfile.txt splitfile

这将创建以下文件:**splitfileaa、splitfileab、splitfileac** 等。

将文件分割成每个包含 500 行的块,从第 100 行开始

要将文件 **bigfile.txt** 分割成每个包含 500 行的块,从第 100 行开始,并且输出文件具有前缀 **splitfile**,请使用以下命令:

$ split -l 500 -d bigfile.txt splitfile 100

这将创建以下文件:**splitfile00、splitfile01、splitfile02** 等。

使用数字后缀分割文件

要将文件 **bigfile.txt** 分割成每个包含 100 行的块,从第 1000 行开始,并且输出文件具有前缀 **splitfile** 和数字后缀,请使用以下命令:

$ split -l 100 -d bigfile.txt splitfile 1000

这将创建以下文件:**splitfile000、splitfile001、splitfile002** 等。

使用不同的后缀分割文件

要将文件 **bigfile.txt** 分割成每个包含 2000 行的块,并且输出文件具有前缀 **splitfile** 和后缀 **.txt**,请使用以下命令:

$ split -l 2000 --suffix-length=4 bigfile.txt splitfile

这将创建以下文件:**splitfile0000.txt、splitfile0001.txt、splitfile0002.txt** 等。

分割文件并指定输出目录

要将文件 **bigfile.txt** 分割成每个包含 1000 行的块,并且输出文件具有前缀 **splitfile** 并存储在输出目录中,请使用以下命令:

$ split -l 1000 bigfile.txt output/splitfile

这将在输出目录中创建以下文件:**splitfileaa、splitfileab、splitfileac** 等。

将文件分割成每个包含 500 行的块,并将行号存储在输出文件名中

要将文件 **bigfile.txt** 分割成每个包含 500 行的块,并将行号包含在输出文件名中,请使用以下命令:

$ split -l 500 --additional-suffix=.txt bigfile.txt splitfile

这将创建以下文件:splitfileaa.txt、splitfileab.txt、splitfileac.txt 等。行号将包含在后缀中,用句点分隔。例如,splitfileaa.txt 将包含第 1-500 行,splitfileab.txt 将包含第 501-1000 行,依此类推。

替代命令

在 Linux 中,还有一些其他命令可以用于分割文件,尽管它们可能没有 `split` 命令的所有选项和功能。`split` 命令的一些替代方案包括:

  • `csplit` − `csplit` 命令类似于 `split`,但它允许你使用模式或行号来指定分割文件的位置。例如,要在每次出现模式 "---" 时分割文件,请使用以下命令:`csplit file /---/`

  • `awk` − `awk` 命令是一个强大的文本处理工具,可用于根据给定的模式或字段分割文件。例如,要将 CSV 文件分割成每个行一个单独的文件,请使用以下命令:`awk -F, '{print > $1".txt"}' file`

  • `sed` − `sed` 命令是一个文本处理工具,可用于对文件执行各种操作,包括分割。要根据模式将文件分割成单独的文件,请将 `sed` 命令与 `awk` 命令结合使用。例如,要在每次出现模式 "---" 时分割文件,请使用以下命令:`sed -n '/---/{h;d};H;${x;s/.*//;p;}' file | awk -F"---" '{print > (NR+1)".txt"}'`

值得注意的是,这些替代方案可能不如 `split` 命令高效或易于使用,并且可能需要更高级的 Linux 文本处理知识。

结论

总的来说,`split` 命令是在 Linux 中根据指定的行数将大型文件分割成较小块的有用实用程序。对于需要更轻松地处理或传输大型文件的情况,它是一个方便的工具。`split` 命令有几个选项允许你自定义输出文件,包括指定前缀、后缀和起始行号。

在 Linux 中,还可以使用其他几个命令来分割文件,例如 csplit、awk 和 sed。这些替代方案可能提供更高级的功能或基于模式分割的能力,但它们可能不如 split 命令高效或易于使用。

更新于:2023年1月4日

3K+ 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告