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

Исходное сообщение
"Перенаправление вывода"

Отправлено agalin , 30-Май-08 00:49 
Имеется следующая строка в скрипте:

oodump -id "$a"-3-2-1 ~/dbase/dbof1.boot | sed -n '/Obj.*\p' | awk -F= '{print ($2)}'

в этой строке делается дамп объекта в базе данных, после чего ведется поиск нужных строк с последующим выводом.

Проблема: вместе с искомой информацией выводятся сообщения об ошибках в базе данных (вероятно после строки "oodump -id "$a"-3-2-1"), причем нужные данные выводятся сразу же за сообщениями об ошибках:

Database error id2002....      ' Сообщение об ошибке базы данных    
Database error id2003....      ' Сообщение об ошибке базы данных  
Database error id2004....      ' Сообщение об ошибке базы данных  
offset10                             ' Нужные данные
offset20                             ' Нужные данные
offset30                             ' Нужные данные

Как перенаправить ошибки куда-нибудь (например /dev/null), чтобы нужные данные были отдельно от ошибок?

Пытался поставить 2>/dev/null в разных местах строки. Может нужно делать как-то по-другому? Подскажите, пожалуйста.


Содержание

Сообщения в этом обсуждении
"Перенаправление вывода"
Отправлено angra , 30-Май-08 01:09 
Сделайте oodump -id "$a"-3-2-1 ~/dbase/dbof1.boot 2>/dev/null и посмотрите исчезнут ли сообщения об ошибках. Если да, то они действительно выводятся во второй канал и их можно так отсеять, если нет, то можно сказать много "лестных" слов об авторах oodump и воспользоваться grep -v '^Database error id' для отбрасывания строк с сообщением об ошибке. Резюмируя:

oodump -id "$a"-3-2-1 ~/dbase/dbof1.boot 2>/dev/null| sed -n '/Obj.*\p' | awk -F= '{print ($2)}'
или
oodump -id "$a"-3-2-1 ~/dbase/dbof1.boot |grep -v '^Database error id'| sed -n '/Obj.*\p' | awk -F= '{print ($2)}'


"Перенаправление вывода"
Отправлено agalin , 30-Май-08 16:40 
Спасибо за совет. oodump действительно не перенаправляет ошибки на второй канал. Пришлось фильтровать сообщения.
Попутно столкнулся с проблемой. Имеется дамп базы данных:

DB Name = mas100
DB ID = 1
DB Read only = False
   ...........
DB Name = EnvDB150
DB ID = 84
DB Read only = False
    ..........

Как вывести DB ID из этого дампа, не выводя DB ID, для которых DB Name = Env* ?


"Перенаправление вывода"
Отправлено Andrey Mitrofanov , 30-Май-08 17:07 
>[оверквотинг удален]
>DB ID = 1
>DB Read only = False
>   ...........
>DB Name = EnvDB150
>DB ID = 84
>DB Read only = False
>    ..........
>
>Как вывести DB ID из этого дампа, не выводя DB ID, для
>которых DB Name = Env* ?

типа,
...|gawk '$1!="DB"{next}$2=="Name"{y=($4!~/^Env/);next}$2=="ID"&&y{print $4}'
? $-)


"Перенаправление вывода"
Отправлено agalin , 09-Июн-08 12:39 
>типа,
>...|gawk '$1!="DB"{next}$2=="Name"{y=($4!~/^Env/);next}$2=="ID"&&y{print $4}'
>? $-)

Spasibo!