如何将文件分成相等的部分而不破坏单独的行?
我想知道是否可以将文件分割成相等的部分(编辑: = 除了最后一个之外全部相等),而不破坏行?在 Unix 中使用 split 命令,行可能会分成两半。有没有一种方法可以将一个文件分成 5 个相等的部分,但仍然只包含整行(如果其中一个文件稍大或稍小也没有问题)?我知道我可以只计算行数,但我必须对 bash 脚本中的很多文件执行此操作。非常感谢!
I was wondering if it was possible to split a file into equal parts (edit: = all equal except for the last), without breaking the line? Using the split command in Unix, lines may be broken in half. Is there a way to, say, split up a file in 5 equal parts, but have it still only consist of whole lines (it's no problem if one of the files is a little larger or smaller)? I know I could just calculate the number of lines, but I have to do this for a lot of files in a bash script. Many thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
如果您的意思是相同数量的行,
split
有一个选项:如果您需要知道
75
真正应该用于 < code>N 等份,其:其中总行数可以通过
wc -l
获得。请参阅以下脚本的示例:
此输出:
split
的最新版本允许您使用-n/--number< 指定多个
CHUNKS
/代码> 选项。因此,您可以使用类似以下内容的内容:(即
ell-slash-6
,意思是行
,而不是one-slash-6
)。这将为您提供大小大致相等的文件,并且没有中线分割。
我提到最后一点是因为它不会为您提供每个文件中大致相同的行数,以及更多相同的字符数。
因此,如果您有一个 20 - 字符行和 19 个 1 字符行(总共 20 行)并拆分为五个文件,您很可能不会在每个文件中得到四行。
If you mean an equal number of lines,
split
has an option for this:If you need to know what that
75
should really be forN
equal parts, its:where total lines can be obtained with
wc -l
.See the following script for an example:
This outputs:
More recent versions of
split
allow you to specify a number ofCHUNKS
with the-n/--number
option. You can therefore use something like:(that's
ell-slash-six
, meaninglines
, notone-slash-six
).That will give you roughly equal files in terms of size, with no mid-line splits.
I mention that last point because it doesn't give you roughly the same number of lines in each file, more the same number of characters.
So, if you have one 20-character line and 19 1-character lines (twenty lines in total) and split to five files, you most likely won't get four lines in every file.
一个简单问题的简单解决方案:
这里不需要编写脚本。
从 man 文件中,
CHUNKS 可能是:< /code>
更新
并非所有 UNIX dist 都包含此标志。例如,它在 OSX 中不起作用。要使用它,您可以考虑替换Mac OS X 实用程序与 GNU 核心实用程序。
A simple solution for a simple question:
no need for scripting here.
From the man file,
CHUNKS may be:
Update
Not all unix dist include this flag. For example, it will not work in OSX. To use it, you can consider replacing the Mac OS X utilities with GNU core utilities.
该脚本甚至不是必需的,split(1) 支持开箱即用的所需功能:
split -l 75 auth.log auth.log。
上面的命令将文件分割成 75 行的块,并以以下形式输出文件:
auth.log.aa, auth.log.ab, ...
wc -l< /code> 原始文件和输出给出:
The script isn't even necessary, split(1) supports the wanted feature out of the box:
split -l 75 auth.log auth.log.
The above command splits the file in chunks of 75 lines a piece, and outputs file on the form:
auth.log.aa, auth.log.ab, ...
wc -l
on the original file and output gives:split 在 coreutils 版本 8.8 中更新(2010 年 12 月 22 日宣布) --number 选项生成特定数量的文件。选项 --number=l/n 生成 n 个文件而不分割行。
coreutils 手册
split was updated in coreutils release 8.8 (announced 22 Dec 2010) with the --number option to generate a specific number of files. The option --number=l/n generates n files without splitting lines.
coreutils manual
我制作了一个 bash 脚本,给出了多个部分作为输入,分割了
我使用
head
和tail
命令的文件,并存储在 tmp 文件中,用于分割文件或使用 awk,其中 0.1 是 10% => 10 份,或 0.334 为 3 份
I made a bash script, that given a number of parts as input, split a file
I used
head
andtail
commands, and store in tmp files, for split the filesor with awk, where 0.1 is 10% => 10 parts, or 0.334 is 3 parts