例如,源文件的大小为1 gb,包含25000行,我想分割大小为100 mb的文件。由于大小限制,我需要带有整行的小文件,而不需要1个文件中的部分行,而其他文件中的其余部分行。提前致谢。如果我的问题感到困惑,请告诉我。
答案 0 :(得分:2)
@bodo的split -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
答案 1 :(得分:1)
如果您的split
命令支持选项-C size
或--line-bytes=size
(请参阅man split
),则可以使用
split -C 100M inputfile
答案 2 :(得分:0)
我不相信这么简单:
在我的PC上,我有一个名为“ 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
进行,直到不再有任何内容为止。
P.s。我没有测试与bc
相关的命令(我没有在系统上安装bc,基本计算器)。