在Linux中将文件拆分成不相等的块

我希望将一个大文件(大约17M的string)分割成多个文件,每个文件的行数都不一样。 是否有可能发送一个数组到' split -l '命令,如下所示:

[ 1=>1000000, 2=>1000537, ... ] 

以便将这些许多行发送到每个块

使用复合命令:

 { head -n 10000 > output1 head -n 200 > output2 head -n 1234 > output3 cat > remainder } < yourbigfile 

这也适用于循环:

 { i=1 for n in 10000 200 1234 do head -n $n > output$i let i++ done cat > remainder } < yourbigfile 

这不适用于OS X,其中head读取和丢弃额外的输出。

你可以通过获取另一个脚本来为你生成sed命令来使用sed

 # split_gen.py use strict; my @limits = ( 100, 250, 340,999); my $filename = "joker"; my $start = 1; foreach my $end (@limits) { print qq{sed -n '$start,${end}p;${end}q' $filename > $filename.$start-$end\n}; $start = $end + 1; } 

运行perl split_gen.py给出:

 sed -n '1,100p;100q' joker > joker.1-100 sed -n '101,250p;250q' joker > joker.101-250 sed -n '251,340p;340q' joker > joker.251-340 sed -n '341,999p;999q' joker > joker.341-999 

如果你对命令感到满意,那么你可以

 perl split_gen.py | sh 

然后享受等待,因为它可能是缓慢的大文件。

split命令没有这个功能,所以你必须使用一个不同的工具,或者写一个你自己的工具。