如何将文件分割成相等的部分,而不破坏各行的完整性?

9 浏览
0 Comments

如何将文件分割成相等的部分,而不破坏各行的完整性?

请问是否有可能将一个文件分成相等的部分(编辑:=除了最后一个以外都相等),而不破坏行?在Unix中使用split命令,行可能被一分为二。有没有办法将一个文件分成5个相等的部分,但仍然只包含整行(如果其中一个文件稍大或稍小也没有问题)?我知道可以计算行数,但我需要在bash脚本中对很多文件进行这样的操作。非常感谢!

0
0 Comments

问题的原因是需要将一个文件分成相等的部分,但不能打断每一行。使用split命令可以实现这个目标,使用命令split -n l/5 your_file.txt可以将文件分割成5个相等的部分,同时不打断每一行。具体的解决方法如下:

1. 首先,在命令行中输入split -n l/5 your_file.txt来将文件分割成5个相等的部分,同时不打断每一行。

2. 如果你的操作系统不支持这个选项,你可以考虑用GNU核心工具替换Mac OS X工具来使用这个选项。具体的替换方法可以参考这个链接

需要注意的是,这个选项中的L是小写L,而不是数字1。

0
0 Comments

问题的原因是要将一个文件分成相等的部分,但不能打断每一行。解决方法是使用split命令来实现这个功能。split命令是一个Linux命令,它支持将文件分割成相等大小的块,而不会打断每一行的内容。以下是使用split命令的示例:

split -l 75 auth.log auth.log.

上述命令将文件分割成每个部分包含75行,并输出的文件名的形式为:auth.log.aa, auth.log.ab, ...

使用wc -l命令在原始文件和输出文件上运行可以得到以下结果:

321 auth.log

75 auth.log.aa

75 auth.log.ab

75 auth.log.ac

75 auth.log.ad

21 auth.log.ae

642 total

通过这种方法,我们可以将文件分割成相等大小的部分,而不会打断每一行的内容。这对于处理大型文件或需要将文件分割成可管理的块的任务非常有用。split命令是一个强大且方便的工具,可以帮助我们快速解决这个问题。

0
0 Comments

如何将文件分割成相等的部分,而不会打断单个行?

如果您是指相等数量的行,split有一个选项:

split --lines=75

如果您需要知道N个相等部分的真实行数,可以使用以下公式:

lines_per_part = int(total_lines + N - 1) / N

其中total lines可以通过wc -l命令获得。

下面是一个示例脚本:

#!/usr/bin/bash

# Configuration stuff

fspec=qq.c

num_files=6

# Work out lines per file.

total_lines=$(wc -l <${fspec})

((lines_per_file = (total_lines + num_files - 1) / num_files))

# Split the actual file, maintaining lines.

split --lines=${lines_per_file} ${fspec} xyzzy.

# Debug information

echo "Total lines = ${total_lines}"

echo "Lines per file = ${lines_per_file}"

wc -l xyzzy.*

这将输出:

Total lines = 70

Lines per file = 12

12 xyzzy.aa

12 xyzzy.ab

12 xyzzy.ac

12 xyzzy.ad

12 xyzzy.ae

10 xyzzy.af

70 total

更近期的split版本允许您使用-n/--number选项指定CHUNKS的数量。因此,您可以使用以下命令:

split --number=l/6 ${fspec} xyzzy.

那将给您大致相等大小的文件,而不会打断行。

我提到最后一点是因为它不会给您大致相等数量的行数,而是相等数量的字符数。

因此,如果您有一行长度为20个字符和19行长度为1个字符的行(总共20行),并且将其分割成五个文件,您很可能不会在每个文件中得到四行。

这将将我的文件分割成75行的片段。但是我想知道是否有一个split命令选项,我可以在不提供行数的情况下指定要将文件分割成5个相等部分,并且每个部分只包含完整的行。

谢谢,那个脚本示例正是我所需要的!

在OS X中执行类似操作的一行命令... split -l num_of_lines_per_file original_file destination_files.

对于大文件(我的测试文件有8300万行),使用上述计算行数的方法有点慢;实际上,您可以将文件名作为参数直接传递给wc命令,而不必将整个文件传递给cat命令,例如wc -l filename.txt。wc输出 ,因此您需要将输出传递给awk来获取单词计数,但是它仍然比将整个文件传递给cat命令并将其传递给wc命令要快得多。

0