Никак не могу понять как сделать такое:
есть список
12261 ? S 0:00 ora_q001_123
12985 ? S 60:50 ora_j002_123
13821 ? S 1:16 ora_j003_123
13930 ? S 0:12 ora_j004_123
17656 ? S 0:00 ora_reco_321
17658 ? S 0:02 ora_cjq0_321
17660 ? S 13:59 ora_arc0_321
17662 ? S 46:27 ora_arc1_321
23943 ? S 0:10 ora_psp0_213
23945 ? S 0:00 ora_mman_213
23947 ? S 4:30 ora_dbw0_213
23949 ? S 2:13 ora_lgwr_213
как мне сделать выборку с выводом списка вида:
sid
123
321
213и без повторов
Спасибо
>sidэто кто такой?
>>sid
>
>это кто такой?это oracle_sid
написал для примера он может быть как буквенный так и цифровой
>это oracle_sidмне это ни о чем не говорит :)
щас парсинг и унификацию числовых строк напишу.
>>sid
>
>это кто такой?
#include <string>
#include <vector>
#include <set>
#include <algorithm>
#include <iterator>
#include <fstream>
#include <iostream>#include <cerrno>
#include <cstring>std::vector<std::string> parse(const std::vector<std::string>& slist) {
std::set<std::string> unique_strings;
std::vector<std::string>::const_iterator it = slist.begin();for ( ; it != slist.end(); ++it ) {
std::string::size_type pos = it->rfind('_');
if ( pos == std::string::npos ) continue;
unique_strings.insert(it->substr(pos+1));
}return std::vector<std::string>(unique_strings.begin(), unique_strings.end());
}int main(int argc, char** argv) {
if ( argc != 2 ) {
std::cerr << "expected file name!" << std::endl;
return 0;
}std::ifstream file(argv[1]);
if ( !file ) {
std::cerr << "can`t open file: " << strerror(errno) << std::endl;
return errno;
}std::vector<std::string> in;
while ( !file.eof() ) {
std::string tmp;
std::getline(file, tmp);
in.push_back(tmp);
}std::vector<std::string> out = parse(in);
std::copy(out.begin(), out.end(), (std::ostream_iterator<std::string>(std::cout, "\n")));
return 0;
}ищет первый подчерк с конца строки. унифицирует числа.
>ищет первый подчерк с конца строки. унифицирует числа.это спасибо я и сам мог написать но на СИ мне не нужно(((
только шел чтоб человек т.е. начальник мог понимать что там написанно
на СИ он не рубец(
>
>>ищет первый подчерк с конца строки. унифицирует числа.
>
>это спасибо я и сам мог написать но на СИ мне не
>нужно(((
>только шел чтоб человек т.е. начальник мог понимать что там написанно
>на СИ он не рубец(это с++ ;)
тем более ваш код не будет откомпелированн без напильника по крайне мере в solaris)
>тем более ваш код не будет откомпелированн без напильника по крайне мере
>в solaris)вам знакомо слово "стандарт" ? так вот у с++ есть стандарт обязывающий всех производителей с++ компиляторов соблюдать его. а солярис его хорошо соблюдает ;)
>>тем более ваш код не будет откомпелированн без напильника по крайне мере
>>в solaris)
>
>вам знакомо слово "стандарт" ? так вот у с++ есть стандарт обязывающий
>всех производителей с++ компиляторов соблюдать его. а солярис его хорошо соблюдает
>;)с этим я с вами полностью согласен
--enable-languages=c++ я не добавлял!
мне нужно было на shell или bash
я это добился вроде)))
>[оверквотинг удален]
>>>в solaris)
>>
>>вам знакомо слово "стандарт" ? так вот у с++ есть стандарт обязывающий
>>всех производителей с++ компиляторов соблюдать его. а солярис его хорошо соблюдает
>>;)
>
>с этим я с вами полностью согласен
>--enable-languages=c++ я не добавлял!
>мне нужно было на shell или bash
>я это добился вроде)))Все равно спасибо :)
>[оверквотинг удален]
>>>вам знакомо слово "стандарт" ? так вот у с++ есть стандарт обязывающий
>>>всех производителей с++ компиляторов соблюдать его. а солярис его хорошо соблюдает
>>>;)
>>
>>с этим я с вами полностью согласен
>>--enable-languages=c++ я не добавлял!
>>мне нужно было на shell или bash
>>я это добился вроде)))
>
>Все равно спасибо :)тебе спасибо за старания) удачного вечера
... | sed -r 's/.*\s*ora_.*_(\d*)/\1/' | sort | uniq
>... | sed -r 's/.*\s*ora_.*_(\d*)/\1/' | sort | uniqв solaris нет параметра -r ( я так пробовал
>>... | sed -r 's/.*\s*ora_.*_(\d*)/\1/' | sort | uniq
>
>в solaris нет параметра -r ( я так пробовалВ Солярке есть маны? :)
... | sed 's/.*_\(\d*\)/\1/' | sort | uniq
>>>... | sed -r 's/.*\s*ora_.*_(\d*)/\1/' | sort | uniq
>>
>>в solaris нет параметра -r ( я так пробовал
>
>В Солярке есть маны? :)
>
>... | sed 's/.*_\(\d*\)/\1/' | sort | uniqда но увы(
$ cat e.sh
cat /tmp/stat|sed 's/.*\s*ora_.*_(\d*)/\1/'| sort | uniq
$ ./e.sh
sed: command garbled: s/.*\s*ora_.*_(\d*)/\1/--
>[оверквотинг удален]
>>
>>... | sed 's/.*_\(\d*\)/\1/' | sort | uniq
>
>да но увы(
>$ cat e.sh
>cat /tmp/stat|sed 's/.*\s*ora_.*_(\d*)/\1/'| sort | uniq
>$ ./e.sh
>sed: command garbled: s/.*\s*ora_.*_(\d*)/\1/
>
>--да тут разобрался спасибо работает
НО есть всегда
в выборке могут присутствовать записи вида 123_new
данный пример выведет только new(
и возможно ли каждый параметр в выборке присваивать в переменную например $s
для дальнейшей манипуляции ими
>и возможно ли каждый параметр в выборке присваивать в переменную например $s
>
>для дальнейшей манипуляции ими/usr/ucb/ps -ax|grep ora_|sed 's/.*_\(\d*\)/\1/'|sort -u
пока что так
вобщем вот выкладываю на всеобщее обозрение что у меня получилось
идея была просто нужна была возможность просмотреть на сервере Работающие на данный момент ORACLE_SID на сервере могут появляться новые базы и также исчезать(для тестов)
и чтоб быть в курсе всех событий было задуманно сделать следующее:
комманда stat и status$ cat stat
#!/bin/bash
#i=`echo SID ............ Status `
#echo $i
/usr/ucb/ps -ax|grep ora_ |sed 's/.*_\(\D*\)/\status \1/'|sort -u >/tmp/stats
chmod +x /tmp/stats
cat /tmp/stats
/tmp/stats >/tmp/Rep
rm /tmp/stats
i=`echo SID ............ Status `
echo $i
cat /tmp/Rep|grep OPEN
cat /tmp/Rep|grep MOUNTED
rm /tmp/Rep$ cat status
#!/bin/bash
#
#IBSOif [ $# -eq 0 ]; then
echo "Status ORACLE_SID Graber";
date
elsesqlplus /nolog <<EOF
conn sys/sys@$1 as sysdba;
select host_name, instance_name, status from gv\$instance;
exit;
EOF
fiВот такие пироги если есть чем дополнить подсказывайте.
Понимаю что сделанно на коленке но главное цель достигнута!
>как мне сделать выборку с выводом списка вида:
>sid
>123
>321
>213В данном случае
| sed 's|.*_||' | sort -u