我需要将几个大文件拆分成特定大小的较小文件,输出500-5000个较小的文件。我正在使用带有-b标识的split
,因此我在达到split
1000文件限制时使用手动解决方法。是否有另一个UNIX命令或Perl one-liner将完成此任务?
答案 0 :(得分:4)
如果我尝试创建大量文件,我会
$ perl -e'print "x"x5000' | split -b 1 && echo done.
split: output file suffixes exhausted
默认情况下,后缀长度为2,允许26 2 = 676个部分。将其增加到3允许26 3 = 17,576份
$ perl -e'print "x"x5000' | split -b 1 -a 3 && echo done.
done.
答案 1 :(得分:4)
您确定1000个文件限制吗?
原始split
没有此限制,GNU或BSD版split
没有限制。也许你会混淆后缀长度和某种限制。在BSD上,后缀从.aaa
开始,一直到.zzz
,超过17,000个文件。
如果三个字符后缀不够,您可以使用-a
标志来调整后缀大小。
$ split -a 5 $file
答案 2 :(得分:1)
通过设置$/
:
将
$/
设置为对整数的引用,标量包含整数, 或者可转换为整数的标量将尝试读取 记录而不是行,最大记录大小为 引用整数个字符。所以这个:local $/ = \32768; # or \"32768", or \$var_containing_32768 open my $fh, "<", $myfile or die $!; local $_ = <$fh>;
将从
$fh
读取不超过32768个字符的记录。
因此,要将大文件拆分为不大于1024字节的较小文件,可以使用以下命令:
use strict;
use warnings;
$/ = \1024;
my $filename = 'A';
while (<>) {
open my $fh, '>', ($filename++ . '.txt') or die $!;
print $fh $_;
close $fh or die $!;
}