Вы, вероятно, нашли бы более продуктивным или предварительно загрузить или статическая ссылка libstdc ++ вместо этого.
Что-то вроде этого жемчуг должно работать. Замените имена файлов в соответствующих случаях.
#!/usr/bin/env perl
use strict;
use warnings;
use IO::Handle;
open(my $list_fh, '<', 'somefile') or die "Failed to open list file: $!";
open(my $out_fh, '>', 'outfile') or die "Failed to open out file: $!";
my $merge_fh = IO::Handle->new();
my $cur_fname = q{};
my $buff;
while ( my $line = <$list_fh> ) {
next if $line =~ /^\s?#/;
chomp($line);
my ($fname, $begin, $end) = split(/\s+/, $line);
if ( $cur_fname ne $fname ) {
$merge_fh->close() if $merge_fh->opened();
open($merge_fh, '<', $fname) or die "Failed to open file: $!";
$cur_fname = $fname;
}
seek($merge_fh, $begin, 0);
read($merge_fh, $buff, $end - $begin);
print {$out_fh} $buff or die "Failed to write to $cur_fname: $!";
}
$merge_fh->close();
$out_fh->close();
$list_fh->close();
С zsh
:
zmodload zsh/mapfile
while read -r f b e; do
[ -f $f ] && printf %s ${${mapfile[$f]}[b+1,e+1]}
done < list.txt > merged
Не становитесь слишком восторженными все же. $mapfile
действительно использует mmap
но читает целый файл в памяти. (см. info zsh 'The zsh/mapfile Module'
для деталей).
С ksh93
:
PATH=/opt/ast/bin:$PATH export PATH
while read -r f b e; do
[[ -f $f ]] && head -c "$((e-b+1))" < "$f" <#(($b))
done < list.txt > merged
При устанавливании ПУТИ тот путь состоит в том так, чтобы head
будьте ksh93 встроенным (даже если существует нет /opt/ast/bin
каталог). <#((n))
frontend ksh93 к lseek
.
PATH=/opt/ast/bin:$PATH export PATH
while read -r f b e; do
[[ -f $f ]] && head -c "$((e-b+1))" -s "$b" < "$f"
done < list.txt > merged
ksh93
head
имеет -s
опция пропустить данные (использование lseek
внутренне для регулярных файлов). Это работало бы пока ksh93
был создан с head
встроенный включенный.
read
/print
в цикл. – vonbrand 01.04.2013, 01:25read()
или страница справочника моей ОС дляfread()
это указывает, что существует некоторое ограничение к этому. Вы означаете от отсутствия RAM держать данные? – jordanm 01.04.2013, 01:34