2013-09-03 4 views
-5
my @input = ("2001::2    62  00:00:00:00:00:00 incmp 1/1 vlan-id 100 "); 

Из массива, содержащего строки, такие как выше, я хотел бы извлечь значение в позиции 62 и сохранить его в новом массиве. Как это сделать?Как я могу извлечь конкретный субстрат из каждого элемента массива?

+1

Почему вы используете массив для одного значения? Почему вы хотите сохранить одно значение в массиве? – ikegami

+0

Это не настоящий случай. на самом деле существует несколько строк, мне просто нужен точный шаблон grep 62 или любое значение, которое может прийти в эту позицию. –

+0

Возможно, вам стоит спросить о вашем фактическом случае. Вы читаете из файла? – TLP

ответ

1

Предполагая, что ваш массив будет в конечном счете содержать больше, чем одно значение:

my @new_array = map { (split)[1] } @input; 

Разделить каждую строку на пробельной карту второго элемента в новый массив.

+0

спасибо. Я пробовал это и получаю желаемый op. :) –

1

split ' ' разделяет строку на пробелы, а (EXPR)[1] возвращает второй скаляр, возвращаемый EXPR.

my $input = "2001::2    62  00:..."; 
my $second = (split ' ', $input)[1]; 

Вы так выяснены вы хотите извлечь это поле из каждого элемента массива, так

my @seconds = map { (split)[1] } @inputs; 

который короток для

my @seconds = map { (split ' ', $_, 0)[1] } @inputs; 
0

Я не подумайте, что вы хотите grep для этого, насколько я знаю, вы не можете захватить группу (в вашем случае вы хотите захватить 62).

Я хотел бы использовать простое регулярное выражение:

#!/usr/bin/perl 
use warnings; 
use strict; 

my @input = ("2001::2 62 00:00:00:00:00:00 incmp 1/1 vlan-id 100 "); 

my @foo; 
foreach (@input) { 
    chomp; 
    my (@match) = ($_ =~ /\d+\s+(\d+)\s+/); 
    push @foo, @match; 
} 

foreach (@foo){ 
    print "$_\n"; 
} 

Выход:

62 

Как вы используете массив я представляю вам несколько матчей, чтобы сделать. Вышеуказанное будет соответствовать каждому номеру, который находится в том же месте, что и ваш тестовый пример, и нажимать на новый массив - @foo ...

+0

Да, правильная работа. спасибо большое :) –

+0

Вы можете использовать 'my (@match) = (/ \ d + \ s + (\ d +) \ s + /);' – RobEarl

Смежные вопросы