Доброго времени суток.Проблема у меня, застрял.
Есть фаил вида...
d150 m 15GB d151 d152
d151 s 15GB c1t2d0s3
d152 s 15GB c1t3d0s3
d140 m 516MB d141 d142
d141 s 516MB c1t0d0s4
d142 s 516MB c1t1d0s4
d110 m 16GB d111 d112
d111 s 16GB c1t0d0s1
d112 s 16GB c1t1d0s1
d170 s 136GB c1t4d0s0 c1t5d0s0Это вывод команды metastat -c в 10-ой Соляре. Мне нужно проанализировать послендий компонент каждой строки (в случае с последней стракой два компонента) и на основе анализа получить примерно такой вывод.
DISK c1t0d0 Contains following metadevices - d111(on slice1), d141(on slice4)
DISK c1t1d0 Contains following metadevices - d112(on slice1), d142(on slice4)
И т.д.
Тоесть мне надо узнать какой диск какие метаустройства содержит.Надеюсь я хорошо описал задачу. Заранее спасибо.
>Проблема у меня, застрял.
>Есть фаил вида...
>......
>Надеюсь я хорошо описал задачу. Заранее спасибо.ну и на каком месте ты застярял? читай построчно свой файл, формируй хеш массив массивов. а потом его выведи.
DISK c1t0d0 Contains following metadevices - d111(on slice1), d141(on slice4)
c1t0d0-ключ хеша
[d111,s1] -элемент массива(тоже массив)
работай.
>[оверквотинг удален]
>
>ну и на каком месте ты застярял? читай построчно свой файл, формируй
>хеш массив массивов. а потом его выведи.
>
>DISK c1t0d0 Contains following metadevices - d111(on slice1), d141(on slice4)
>
>c1t0d0-ключ хеша
>
>[d111,s1] -элемент массива(тоже массив)
>работай.Легко сказать трудно сделать, и так читаю фаил.
open(INPUT, "$ARGV[0]") || die "USAGE: $0 filename\n";
while (<INPUT>) {
@sp=split ' ', $_;естессно то что мне надо находится в $sp[3]
вот отсюда попадробней, я не так хорош в PERL-е...
И еще мне ужасно интересно как мне поделить c1t3d0s4 на два куска c1t3d0 и s4...
З.Ы. Ксати я работаю и много...
> И еще мне ужасно интересно
>как мне поделить c1t3d0s4 на два куска c1t3d0 и s4...
>З.Ы. Ксати я работаю и много...:) а я нифига не делаю.
if($sp[3] =~ m/(c\dt\dd\d)(s\d)/) {
$arg1 = $1;
$arg2 = $2;
}я не знаю полный формат записи слайсов солякре, но то что ты привел должно разбираться приблизительно так.
если цифр больше чем одна, к примеру от 1 до 2 то можно записать так
m/(c\d{1,2}t\d{1,2}d\d{1,2})(s\d{1,2})/
>[оверквотинг удален]
>if($sp[3] =~ m/(c\dt\dd\d)(s\d)/) {
> $arg1 = $1;
> $arg2 = $2;
>}
>
>я не знаю полный формат записи слайсов солякре, но то что ты
>привел должно разбираться приблизительно так.
>если цифр больше чем одна, к примеру от 1 до 2 то
>можно записать так
>m/(c\d{1,2}t\d{1,2}d\d{1,2})(s\d{1,2})/Да долго мне еще учиться...
Спасибо Бoльшое, пойду пробовать...
А слаисы в Соляре обозначаются так -- c1t3d0(сам диск) s4(слайс или если хатите партиция(aka partition))З.Ы. Када буду во всем этом разбираться тоже буду нифига не делать...
Ты так и не описал как интерпретировать последнюю строчку, а если без нее то пожалуйста:$ cat t.txt
d150 m 15GB d151 d152
d151 s 15GB c1t2d0s3
d152 s 15GB c1t3d0s3
d140 m 516MB d141 d142
d141 s 516MB c1t0d0s4
d142 s 516MB c1t1d0s4
d110 m 16GB d111 d112
d111 s 16GB c1t0d0s1
d112 s 16GB c1t1d0s1$perl -e 'open(FH, "t.txt");while (<FH>){next unless /^\s*(d\d+).*(c\d+t\d+d\d+)s(\d+)/;$disk{$2}.="$1(on slice $3) "};print "DISK $_ Contains following metadevices - $disk{$_}\n" foreach sort keys %disk'
DISK c1t0d0 Contains following metadevices - d141(on slice 4) d111(on slice 1)
DISK c1t1d0 Contains following metadevices - d142(on slice 4) d112(on slice 1)
DISK c1t2d0 Contains following metadevices - d151(on slice 3)
DISK c1t3d0 Contains following metadevices - d152(on slice 3)