1

例如,源文件为 1 gb,25000 行,我想分割大小阈值为 100 mb 的文件。由于大小限制,我需要带有整行的小文件,而不是 1 个文件中的部分行和其他文件中的剩余部分行。提前致谢。如果我的问题令人困惑,请告诉我。

4

3 回答 3

2

@bodo'ssplit -C是一个更好的解决方案,但如果你没有,你可以计算字符数,awk并在你得到 100*1024*1024 个字符的输出时滚动到一个新的输出文件。

请注意,这里隐含假设每个字符 1 个字节 - 注意是否使用多字节字符等。

awk '{
   # Total up length of this line plus a line-feed
   t=t+length($0)+1
   # If we have reached 100MB, roll over the chunk number and zero tally
   if(t>100*1024*1024){c+=1;t=0}
   # Write current line to file "chunk-NNN.txt"
   print >> "chunk-" (c+1) ".txt"
}' YourFile.txt
于 2018-12-12T16:44:56.270 回答
1

如果您的split命令支持选项-C size--line-bytes=size(参见man split),您可以使用

split -C 100M inputfile
于 2018-12-12T16:12:26.600 回答
0

我不相信这很简单:

在我的电脑上,我有一个名为“prebuild.txt”的文件。为了知道大小,我这样做ls -l(可以解析):

Prompt>ls -s prebuild.txt
135868 prebuild.txt

因此,大小约为 135,868 Mb。

可以使用以下方法找到行数wc -l

Prompt>wc -l prebuild.txt
424358 prebuild.txt

为了把它切成一块±100Mb,我需要知道百分比:

Prompt>$ echo 100*100000/135868 | bc
73.6

所以,我需要大约 73.6% 的文件。对应的行数:

echo 73.6*424358/100 | bc
312327,488

只需将文件的前 312327 行放入 file1.txt 即可:

head -312327 prebuild.txt >file1.txt

其余的可以在原始文件的提示行上播放,head直到tail什么都没有了。

Ps 我没有测试bc相关命令(我没有得到 bc,基本计算器,安装在我的系统上)。

于 2018-12-12T13:47:00.410 回答