如何将文件分割成相等的部分,而不破坏各行的完整性?
问题的原因是需要将一个文件分成相等的部分,但不能打断每一行。使用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。
问题的原因是要将一个文件分成相等的部分,但不能打断每一行。解决方法是使用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命令是一个强大且方便的工具,可以帮助我们快速解决这个问题。
如何将文件分割成相等的部分,而不会打断单个行?
如果您是指相等数量的行,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输出