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