Я хотел бы отфильтровать определенные столбцы с помощью регулярного выражения и отбросить другие. Например, если у меня были следующие имена столбцов:
дата
mem_total
cpu.usagemhz.average_0
cpu.usagemhz.average_1
cpu.usagemhz.average_2
Я хотел бы захватить только столбцы, которые начинаются с "cpu.usage.mhz.average"
Является ли их особая функция text :: csv, которая поможет мне быстро проверить имена столбцов?
Спасибо!
JD
* Обновление **
Я попытался ответить на Jimtut, и это очень близко к тому, что я ищу. Еще раз спасибо всем!
Вот код из jimtut с одним небольшим изменением оператора print внизу. Я добавил print $ colCount, чтобы посмотреть, что происходит с данными;
use Text::CSV;
my $file = "foo.csv";
my $pattern = ".*In";
open(F, $file) or warn "Warning! Unable to open $file\n";
my $lineCount = 0;
my %desiredColumns;
while(<F>) {
$lineCount++;
my $csv = Text::CSV->new();
my $status = $csv->parse($_); # should really check this!
my @fields = $csv->fields();
my $colCount = 0;
if ($lineCount == 1) {
# Let's look at the column headings.
foreach my $field (@fields) {
$colCount++;
if ($field =~ m/$pattern/) {
# This heading matches, save the column #.
$desiredColumns{$colCount} = 1;
}
}
}
else {
# Not the header row. Parse the body of the file.
foreach my $field (@fields) {
$colCount++;
if (exists $desiredColumns{$colCount}) {
# This is one of the desired columns.
# Do whatever you want to do with this column!
print "$colCount\t$field\n";
}
}
}
}
close(F);
Вот результаты
colCount | $field
12 565
13 73
14 36
15 32
16 127
17 40
18 32
19 42
20 171
12 464
13 62
14 32
15 24
16 109
17 21
18 19
19 39
20 150
12 515
13 76
14 28
15 30
16 119
17 15
18 25
19 46
20 169
12 500
13 71
14 30
15 28
16 111
17 20
18 18
19 40
20 167
Я хотел бы добавить эти данные в отдельные массивы или хэши. что ты думаешь? что-то вроде ...
foreach column {
проверьте, существует ли уже хеш с таким номером столбца. Если нет, то создайте хеш.
}
Затем просмотрите каждое поле и добавьте данные поля в соответствующий хеш.
Как вы думаете, это правильный путь для решения этой проблемы?