В настоящее время у меня есть следующий сценариймодификация сценария в Perl
#!/usr/bin/env perl
use strict;
use warnings;
my %seen;
my $header = <> . <>;
print $header;
my $last_sequence_number = 0;
open(my $output, ">", "output.$last_sequence_number.out") or die $!;
print {$output} $header;
$seen{$last_sequence_number}++;
while (<>) {
my ($key) = split;
next unless $key =~ m/^\d+$/;
my $sequence_number = int($key/1000);
if (not $sequence_number == $last_sequence_number) {
print "Opening new file for $sequence_number\n";
close($output);
open($output, ">", "output.$sequence_number.out") or die $!;
print {$output} $header unless $seen{$sequence_number}++;
$last_sequence_number = $sequence_number;
}
print {$output} $_;
}
скрипт разбивает файл в другие файлы с файлом шаблона 1 файл 2 ... теперь я должен был бы перейти к сценарию другого параметра который позволяет указать префикс для выхода так, если этот дополнительный вход 1
, то выход будет
1_file1
, 1_file2
.... и так далее .. как я могу это сделать?
Я знаю, что можно было бы использовать что-то вроде
use Getopt::Long;
?
попробовал этот
#!/usr/bin/env perl
use strict;
use warnings;
my %seen;
my $header = <> . <>;
print $header;
my ($suffix, $filename) = @ARGV;
open (my $input, "<", $filename) or die $!;
my $last_sequence_number = 0;
open(my $output, ">", "output.$last_sequence_number.out") or die $!;
print {$output} $header;
$seen{$last_sequence_number}++;
while (<$input>) {
my ($key) = split;
next unless $key =~ m/^\d+$/;
my $sequence_number = int($key/1000);
if (not $sequence_number == $last_sequence_number) {
print "Opening new file for $sequence_number\n";
close($output);
open($output, ">", "output.$sequence_number.out") or die $!;
print {$output} $header unless $seen{$sequence_number}++;
$last_sequence_number = $sequence_number;
}
print {$output} $_;
}
, но это не работает. Что не так?
я
No such file or directory at ./spl.pl line 10, <> line 2.
после заголовка печатается.
catn вы предоставляете полностью измененный скит, пожалуйста ... – ktoui
@ sobrique обновил ответ .. вопрос .... не могли бы вы ПОЛУЧИТЬ loo at IT – ktoui
Вы по-прежнему используете '<>' - который не работайте больше. Эта строка '$ header' тоже нуждается в изменении. – Sobrique