URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 6788
[ Назад ]

Исходное сообщение
"Помогите с написанием скрипта."

Отправлено Arpo , 27-Сен-07 09:25 
Доброго времени суток.

Проблема у меня, застрял.

Есть фаил вида...

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)
И т.д.
Тоесть мне надо узнать какой диск какие метаустройства содержит.

Надеюсь я хорошо описал задачу. Заранее спасибо.


Содержание

Сообщения в этом обсуждении
"Помогите с написанием скрипта."
Отправлено NuINu , 27-Сен-07 09:43 
>Проблема у меня, застрял.
>Есть фаил вида...
>......
>Надеюсь я хорошо описал задачу. Заранее спасибо.

ну и на каком месте ты застярял? читай построчно свой файл, формируй хеш массив массивов. а потом его выведи.

DISK c1t0d0 Contains following metadevices - d111(on slice1),  d141(on slice4)

c1t0d0-ключ хеша

[d111,s1] -элемент массива(тоже массив)
работай.


"Помогите с написанием скрипта."
Отправлено Arpo , 27-Сен-07 09:53 
>[оверквотинг удален]
>
>ну и на каком месте ты застярял? читай построчно свой файл, формируй
>хеш массив массивов. а потом его выведи.
>
>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...
З.Ы. Ксати я работаю и много...


"Помогите с написанием скрипта."
Отправлено NuINu , 27-Сен-07 10:58 

>       И еще мне ужасно интересно
>как мне поделить 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})/


"Помогите с написанием скрипта."
Отправлено Arpo , 27-Сен-07 12:23 
>[оверквотинг удален]
>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))

З.Ы. Када буду во всем этом разбираться тоже буду нифига не делать...


"Помогите с написанием скрипта."
Отправлено angra , 30-Сен-07 10:10 
Ты так и не описал как интерпретировать последнюю строчку, а если без нее то пожалуйста:

$ 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)