Вот один из способов разделения текстовых файлов, который имеет преимущество, заключающееся в том, что он не занимает много места в памяти сразу. (Вы также можете разделить двоичные файлы, но тогда вам нужно будет использовать read
вместо gets
, а также рассмотреть, есть ли границы записей в данных; текст в основном проще.)
#!/usr/bin/env tclsh8.5
proc splitter {filename fileCount} {
set targetFileSize [expr {[file size $filename] / $fileCount}]
set n 0
set fin [open $filename]
while {[gets $fin line]} {
if {![info exist fout]} {
set fout [open $filename.split_[incr n] w]
}
puts $fout $line
if {[tell $fout] > $targetFileSize} {
close $fout
unset fout
}
}
if {[info exist fout]} {
close $fout
}
close $fin
}
splitter {*}$argv; # Connect to outside command line