Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Операционные системы (2 семестр).docx
Скачиваний:
3
Добавлен:
12.11.2019
Размер:
193.38 Кб
Скачать

Завдання 2

У файлі query1 вибрати всі рядки, у яких зарплата становить ціле число тисяч.

Розв'язок 1:

  1. Згідно зі стуктурою файлу, стовпець зарплати починається з позиції 60, тому - підвираз: ".\{59\}".

  2. Якщо зарплата становить ціле число тисяч, то в ній утримується одна або кілька цифр, за якими іде три нулі - підвираз: "[0-9]\{1,\}000".

  3. Однак можлива (теоретично) зарплата, наприклад "10001", тому варто подбати про те, щоб наступні за трьома нулями символи були відмінні від значущих цифр. Таких символів може бути скільки завгодно, і ця умова можна забезпечити підвиразом: "[0-9]*".

  4. Підсумкове регулярне вираження:

  5. ".\{59\}[0-9]\{1,\}000[0-9]*"

  6. Протокол виконання:

Script started on Thu Sep 5 07:44:14 2002

bash2-2.05$ grep ".\{59\}[0-9]\{1,\}000[0-9]*" ../metod/query1

7569 CHRIS L ALBERTS MANAGER RESEARCH NEW-YORK 3000

7788 DONALD T SCOTT ANALYST RESEARCH DALLAS 3000

7799 MATTHEW G FISHER ANALYST RESEARCH NEW-YORK 3000

7839 FRANCIS A KING PRESIDENT ACCOUNTING NEW-YORK 5000

7902 JENNIFER D FORD ANALYST RESEARCH DALLAS 3000

bash2-2.05$

Script done on Thu Sep 5 07:44:19 2002

Розв'язок 2:

  1. Оскільки зарплата є останнім полем рядка файлу query1, можливо, можна просто зажадати, щоб три нулі були останніми символами рядка й сформулювати регулярне вираження в такий спосіб: "000$". Однак, такий розв'язок може наткнутися на неочевидну перешкоду. Усе залежить від того, якими засобами був підготовлений вихідний файл query1 (особливо, якщо він був перенесений з іншої системи). Справа в тому, що різні програми й редактори використовують різні способи перекладу рядка, і наприкінці рядка можуть виявитися деякі додаткові (невидимі "неозброєним оком" символи. Таким чином, останній 0 у зарплаті може ще не бути останнім символом рядка. Як правило, побачити ці додаткові символи можна, виконавши команду cat з опцією -v. У цьому випадку на видачі команди cat можна побачити недрукований символ, показуваний, наприклад, як: "M".

  2. Наступні протокол ілюструє цей випадок:

Script started on Thu Sep 5 07:45:53 2002

bash2-2.05$ grep "000$" ../metod/query1

bash2-2.05$ cat -v ../metod/query1

7369 JOHN Q SMITH CLERK RESEARCH DALLAS 800M

7499 KEVIN J ALLEN SALESPERSON SALES CHICAGO 1600M

7505 JEAN K DOYLE MANAGER SALES NEW-YORK 2850M

7506 LYNN S DENNIS MANAGER SALES DALLAS 2750M

7507 LESLIE D BAKER MANAGER OPERATIONS NEW-YORK 2200M

7521 CYNTHIA D WARD SALESPERSON SALES CHICAGO 1250M

7555 DANIEL T PETERS SALESPERSON SALES NEW-YORK 1250M

7557 KAREN P SHAW SALESPERSON SALES NEW-YORK 1250M

7560 SARAH S DUNCAN SALESPERSON SALES DALLAS 1250M

7564 GREGORY J LANGE SALESPERSON SALES DALLAS 1250M

7566 TERRY M JONES MANAGER RESEARCH DALLAS 2975M

7569 CHRIS L ALBERTS MANAGER RESEARCH NEW-YORK 3000M

7600 RAYMOND Y PORTER SALESPERSON SALES NEW-YORK 1250M

7609 RICHARD M LEWIS STAFF OPERATIONS DALLAS 1800M

7654 KENNETH J MARTIN SALESPERSON SALES CHICAGO 1250M

7676 DENISE D SOMMERS STAFF OPERATIONS CHICAGO 1850M

7698 MARION S BLAKE MANAGER SALES CHICAGO 2850M

7782 CAROL F CLARK MANAGER ACCOUNTING NEW-YORK 2450M

7788 DONALD T SCOTT ANALYST RESEARCH DALLAS 3000M

7789 LIVIA N WEST SALESPERSON SALES DALLAS 1500M

7799 MATTHEW G FISHER ANALYST RESEARCH NEW-YORK 3000M

7820 PAUL S ROSS SALESPERSON SALES BOSTON 1300M

7839 FRANCIS A KING PRESIDENT ACCOUNTING NEW-YORK 5000M

7876 DIANE G ADAMS CLERK RESEARCH DALLAS 1100M

7900 FRED S JAMES CLERK SALES CHICAGO 950M

7902 JENNIFER D FORD ANALYST RESEARCH DALLAS 3000M

7916 GRACE M ROBERTS ANALYST RESEARCH NEW-YORK 2875M

7919 MICHAEL A DOUGLAS CLERK RESEARCH NEW-YORK 800M

7934 BARBARA M MILLER CLERK ACCOUNTING NEW-YORK 1300M

7950 ALICE B JENSEN CLERK SALES NEW-YORK 750M

7954 JAMES T MURRAY CLERK SALES DALLAS 750M

bash2-2.05$

Script done on Thu Sep 5 07:46:12 2002

Розв'язок 3:

  1. Уточнимо логікові попереднього розв'язку, оказавшегося неправильним. За трьома нулями перед кінцем рядка може випливати (а може й не випливати) ще один символ, відмінний від значущої цифри:

  2. "000[0-9]\{0,1\}"

  3. Протокол виконання:

Script started on Thu Sep 5 07:48:12 2002

bash2-2.05$ grep "000[0-9]\{0,1\}" ../metod/query1

7569 CHRIS L ALBERTS MANAGER RESEARCH NEW-YORK 3000

7788 DONALD T SCOTT ANALYST RESEARCH DALLAS 3000

7799 MATTHEW G FISHER ANALYST RESEARCH NEW-YORK 3000

7839 FRANCIS A KING PRESIDENT ACCOUNTING NEW-YORK 5000

7902 JENNIFER D FORD ANALYST RESEARCH DALLAS 3000

bash2-2.05$

Script done on Thu Sep 5 07:48:15 2002