У меня есть код, который добавляет все векторы во все файлы. Может быть любое количество входных файлов. Например первый входной файл:Как определить n-й строки из n файлов в то время как <>
0.55 0 0.3335 1.2
0.212 0 2.2025 1
и второй из них:
0.25 0 0.3333 1.0
0.1235 0 0.2454 1
Что я получаю это сумма всех векторов, таким образом, в результате я получаю один вектор который:
1.13550 0 3.1147 4.2
Но я пытаюсь суммировать первый вектор первого файла с первым вектором второго файла и так далее. В результате согласно этому примеру я должен получить 2 вектора.
Теперь у меня есть это:
use strict;
use warnings;
if ($ARGV[0] ne "vector1.dat"){
die ("vector1.dat is necessary as first argument");
}
my @sum = 0;
my $dim = 0;
while (<>) {
#Ignore blank lines, hashtags
#and lines starting with $
if ($_ =~ /#/ || $_ =~ /^$/ || $_ =~ /^\s$/){
next;
}
my @vectors = split(" ", $_);
my $vector_length = @vectors;
if ($dim eq 0) {
$dim = $vector_length;
}
else {
if ($dim ne $vector_length) {
die ("Vector dimensions do not match. : $!");
}
}
for (my $i = 0; $i <= $#vectors; $i++) {
$sum[$i] += $vectors[$i];
}
}
$" = "\t\t";
print "\n --- \n @sum \n";
Что мне нужно только, чтобы узнать, как определить п-ю строку каждого файла и просуммировать значения столбцов этих строк, сохраняя при этом в виду, что может n количество файлов. Я видел вопрос, связанный с файлом, с подобной проблемой, однако Я не нашел там своего ответа. Просто ищите предложения и рекомендации. На этом застрял.
Вы должны «использовать предупреждения« все »для« -w »на линии shebang. Не используйте как – Borodin
'my @sum = 0'? Что это должно значить? Массив, в котором первый элемент равен 0? – TLP
Если вы указали '/^$ /' для проверки строк, начинающихся со знака доллара '$', это не сработает, так как '$' является метасимволом регулярного выражения. Который вы случайно показываете в следующем регулярном выражении. – TLP