Как я могу написать Perl-скрипт, который читает из другого файла? - PullRequest
0 голосов
/ 23 ноября 2011

Я хочу написать Perl Script, который читает файл file.txt со столбцами чисел,

20  30  12
31  20  54
63  30  21
11  12  10

и сделайте некоторые вычисления, например, среднее значение. Я не знаю, как объявить и инициализировать это. У меня есть этот пример, в котором ищется медиана, и он имеет объявленные данные, в моем случае данные находятся в файле, а не в скрипте и хотят вычислить медиану. есть это .. #! / usr / bin / perl

#data points 
@vals = ( 33, 23, 55, 39, 41, 46, 38, 52, 34, 29, 27, 51, 33, 28 ); 
print "UNSORTED: @vals\n"; 

#sort data points 
@vals = sort(@vals); 
print "SORTED: @vals\n"; #test to see if there are an even number of data points 
if( @vals % 2 == 0) { 

#if even then: 
$sum = $vals[(@vals/2)-1] + $vals[(@vals/2)]; 
$med = $sum/2; 
print "The median value is $med\n";
}
else{ 
#if odd then: 
print "The median value is $vals[@vals/2]\n";
} 
exit;

Ответы [ 3 ]

2 голосов
/ 23 ноября 2011

Используйте команду open .На этой странице множество хороших примеров.

1 голос
/ 23 ноября 2011

Здесь предлагаются рекомендуемые функции (см. Справочник функций ):

  1. Откройте файл для чтения: используйте функцию open
  2. Цикл каждой строки: while (my $line = <$filehandle>)
  3. Удалить завершающий перевод строки: используйте chomp
  4. Извлечение значений из каждой строки: используйте функцию split
  5. Сохранить значения в массиве: использовать push

Чтобы убедиться, что ваш массив имеет то, что вы хотите в конце:

use Data::Dumper;
print Dumper \@vals;

UPDATE

Не дав вам полного ответа (поскольку это домашнее задание), взгляните на пример кода в каждой записи ссылки на функцию.

Вот кое-что, с чего можно начать:

open my $filehandle, '<', $filename
    or die "Couldn't open $filename";
while (my $line = <$filehandle>) {
    # do stuff with $line
}
close $filehandle;
1 голос
/ 23 ноября 2011

Эта оболочка, однострочная, умножает первый столбец на второй:

perl -lane 'print $F[0] * $F[1]' <FILE>

РЕДАКТИРОВАТЬ: И версия сценария perl с вашими новыми требованиями и файл с 3 столбцами:

#!/usr/bin/perl

use strict;
use warnings;

my (@vals, $sum, $med);

while (<>) {
    @vals = split;

    print "UNSORTED: @vals\n"; 

    #sort data points 
    @vals = sort(@vals); 
    print "SORTED: @vals\n"; #test to see if there are an even number of data points 

    if(@vals % 2 == 0) { 
        #if even then: 
        $sum = $vals[(@vals/2)-1] + $vals[(@vals/2)]; 
        $med = $sum/2; 
        print "The median value is $med\n";
    }
    else{ 
        #if odd then: 
        print "The median value is $vals[@vals/2]\n";
    } 

    print "\n";
}

Вы можете понять, что происходит, а не просто вырезать и вставить;)

Чтобы запустить скрипт:

./script.pl file_with_cols.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...