The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Сделать выборку, !*! rahc, 10-Дек-09, 13:18  [смотреть все]
Никак не могу понять как  сделать такое:
есть список
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

и без повторов
Спасибо

  • Сделать выборку, !*! niXman, 13:40 , 10-Дек-09 (1)
    • Сделать выборку, !*! rahc, 13:41 , 10-Дек-09 (2)
      >>sid
      >
      >это кто такой?

      это oracle_sid
      написал для примера он может быть как буквенный так и цифровой


    • Сделать выборку, !*! niXman, 16:26 , 10-Дек-09 (12)
      >>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;
      }

      ищет первый подчерк с конца строки. унифицирует числа.

      • Сделать выборку, !*! rahc, 16:40 , 10-Дек-09 (13)

        >ищет первый подчерк с конца строки. унифицирует числа.

        это спасибо я и сам мог написать но на СИ мне не нужно(((
        только шел чтоб человек т.е. начальник мог понимать что там написанно
        на СИ он не рубец(

        • Сделать выборку, !*! niXman, 16:57 , 10-Дек-09 (15)
          >
          >>ищет первый подчерк с конца строки. унифицирует числа.
          >
          >это спасибо я и сам мог написать но на СИ мне не
          >нужно(((
          >только шел чтоб человек т.е. начальник мог понимать что там написанно
          >на СИ он не рубец(

          это с++ ;)

      • Сделать выборку, !*! rahc, 16:42 , 10-Дек-09 (14)
        тем более ваш код не будет откомпелированн без напильника по крайне мере в solaris)
        • Сделать выборку, !*! niXman, 16:59 , 10-Дек-09 (16)
          >тем более ваш код не будет откомпелированн без напильника по крайне мере
          >в solaris)

          вам знакомо слово "стандарт" ? так вот у с++ есть стандарт обязывающий всех производителей с++ компиляторов соблюдать его. а солярис его хорошо соблюдает ;)

          • Сделать выборку, !*! rahc, 17:20 , 10-Дек-09 (17)
            >>тем более ваш код не будет откомпелированн без напильника по крайне мере
            >>в solaris)
            >
            >вам знакомо слово "стандарт" ? так вот у с++ есть стандарт обязывающий
            >всех производителей с++ компиляторов соблюдать его. а солярис его хорошо соблюдает
            >;)

            с этим я с вами полностью согласен
            --enable-languages=c++ я не добавлял!
            мне нужно было на shell или bash
            я это добился вроде)))

            • Сделать выборку, !*! niXman, 17:47 , 10-Дек-09 (18)
              >[оверквотинг удален]
              >>>в solaris)
              >>
              >>вам знакомо слово "стандарт" ? так вот у с++ есть стандарт обязывающий
              >>всех производителей с++ компиляторов соблюдать его. а солярис его хорошо соблюдает
              >>;)
              >
              >с этим я с вами полностью согласен
              >--enable-languages=c++ я не добавлял!
              >мне нужно было на shell или bash
              >я это добился вроде)))

              Все равно спасибо :)

              • Сделать выборку, !*! rahc, 18:00 , 10-Дек-09 (19)
                >[оверквотинг удален]
                >>>вам знакомо слово "стандарт" ? так вот у с++ есть стандарт обязывающий
                >>>всех производителей с++ компиляторов соблюдать его. а солярис его хорошо соблюдает
                >>>;)
                >>
                >>с этим я с вами полностью согласен
                >>--enable-languages=c++ я не добавлял!
                >>мне нужно было на shell или bash
                >>я это добился вроде)))
                >
                >Все равно спасибо :)

                тебе спасибо за старания) удачного вечера

  • Сделать выборку, !*! Slavaz, 13:50 , 10-Дек-09 (3)
    ... | sed -r 's/.*\s*ora_.*_(\d*)/\1/' | sort | uniq
    • Сделать выборку, !*! rahc, 13:52 , 10-Дек-09 (5)
      >... | sed -r 's/.*\s*ora_.*_(\d*)/\1/' | sort | uniq

      в solaris нет параметра -r ( я так пробовал

      • Сделать выборку, !*! Slavaz, 13:58 , 10-Дек-09 (6)
        >>... | sed -r 's/.*\s*ora_.*_(\d*)/\1/' | sort | uniq
        >
        >в solaris нет параметра -r ( я так пробовал

        В Солярке есть маны? :)

        ... | sed  's/.*_\(\d*\)/\1/' | sort | uniq

        • Сделать выборку, !*! rahc, 14:01 , 10-Дек-09 (7)
          >>>... | 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/

          --

          • Сделать выборку, !*! rahc, 14:09 , 10-Дек-09 (8)
            >[оверквотинг удален]
            >>
            >>... | 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(

  • Сделать выборку, !*! rahc, 14:24 , 10-Дек-09 (9)
    и возможно ли каждый параметр в выборке присваивать в переменную например $s
    для дальнейшей манипуляции ими
    • Сделать выборку, !*! rahc, 14:45 , 10-Дек-09 (10)
      >и возможно ли каждый параметр в выборке присваивать в переменную например $s
      >
      >для дальнейшей манипуляции ими

      /usr/ucb/ps -ax|grep ora_|sed 's/.*_\(\d*\)/\1/'|sort -u
      пока что так

      • Сделать выборку, !*! rahc, 16:08 , 10-Дек-09 (11)
        вобщем вот выкладываю на всеобщее обозрение что у меня получилось
        идея была просто нужна была возможность просмотреть на сервере Работающие на данный момент 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
        #
        #IBSO

        if [ $# -eq 0 ]; then
        echo "Status ORACLE_SID Graber";
        date
        else

        sqlplus /nolog <<EOF
        conn sys/sys@$1 as sysdba;
        select host_name, instance_name, status from gv\$instance;
        exit;
        EOF
        fi

        Вот такие пироги если есть чем дополнить подсказывайте.
        Понимаю что сделанно на коленке но главное цель достигнута!

  • Сделать выборку, !*! аноним, 21:15 , 10-Дек-09 (20)
    >как мне сделать выборку с выводом списка вида:
    >sid
    >123
    >321
    >213

    В данном случае

    | sed 's|.*_||' | sort -u




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру