我有一个非常大的 .mbox(几 GB),我想将其拆分为与电子邮件一样多的文本文件。我按照 Oki Erie Rinaldi 从以下问题中得到的答案:How to split an mbox file into n-MB big chunks using theterminal?
mboxsplit.txt
的内容:
BEGIN{chunk=0;filesize=0;}
/^From /{
if(filesize>=40000000){#file size per chunk in byte
close("chunk_" chunk ".txt");
filesize=0;
chunk++;
}
}
{filesize+=length()}
{print > ("chunk_" chunk ".txt")}
然后在该目录中运行/键入此行(包含 mboxsplit.txt 和 mbox 文件):
awk -f mboxsplit.txt The_large_mbox_file.mbox
因此我将
mboxsplit.txt
的第三行替换如下:
if(filesize>=0){#file size per chunk in byte
和
mboxsplit.txt
的最后一行如下:
{print > ("chunk_" sprintf("%04d",chunk) ".txt");}
但是,我得到以下输入
awk:无法打开文件 chunk_0253.txt 输入记录号 924244,文件 The_large_mbox_file.mbox 源代码行号 10
注意,该代码适用于
{print > ("chunk_" sprintf("%03d",chunk) ".txt");}
但不是为了
{print > ("chunk_" sprintf("%04d",chunk) ".txt");}
{print > ("chunk_" sprintf("%05d",chunk) ".txt");}
{print > ("chunk_" sprintf("%06d",chunk) ".txt");}
由于错误编号(
chunk_0253.txt
)中的文件编号接近256,可能与函数sprintf
溢出有关,或者是其他原因?
我将
mboxsplit.txt
修改如下,去掉了 `sprintf' 的使用。代码不是很优雅,但它可以工作:
BEGIN{chunk=0;filesize=0;}
/^From /{
if(filesize>=0){#file size per chunk in byte
close("chunk_" chunk_str ".txt");
filesize=0;
chunk++;
}
}
{filesize+=length()}
{
if((chunk>=0) && (chunk<9)){
{chunk_str="00000" chunk};
}
}
{
if((chunk>=10) && (chunk<99)){
{chunk_str="0000" chunk};
}
}
{
if((chunk>=100) && (chunk<999)){
{chunk_str="000" chunk};
}
}
{
if((chunk>=1000) && (chunk<9999)){
{chunk_str="00" chunk};
}
}
{
if((chunk>=10000) && (chunk<99999)){
{chunk_str="0" chunk};
}
}
{
if(chunk>=100000){
{chunk_str= chunk};
}
}
{print > ("chunk_" chunk_str ".txt");}