
Само решение будет выглядеть следующим образом:
^[0-9]\{1,4\} R
Ниже приведен пример с несколькими вариантами решений, по образцу которого можно описать решить поставленной задачи.
В файле query1 выбрать все строки, в которых зарплата составляет целое число тысяч.
Решение 1:
- Согласно структуре файла, столбец зарплаты начинается с позиции 60, поэтому - подвыражение: "^.\{59\}".
- Если зарплата составляет целое число тысяч, то в ней содержится одна или несколько цифр, за которыми следует три нуля - подвыражение: "[0-9]\{1,\}000".
- Однако возможна (теоретически) зарплата, например "10001", поэтому стоит позаботиться о том, чтобы следующие за тремя нулями символы были отличны от значащих цифр. Таких символов может быть сколько угодно, и это условие можно обеспечить подвыражением: "[^0-9]*".
- Итоговое регулярное выражение:
5. "^.\{59\}[0-9]\{1,\}000[^0-9]*"
- Протокол выполнения:
student@r111wslin01 ~ $
grep "^.\{59\}[0-9]\{1,\}000[^0-9]*" query17569 CHRIS L ALBERTS MANAGER RESEARCH NEW-YORK 30007788 DONALD T SCOTT ANALYST RESEARCH DALLAS 30007799 MATTHEW G FISHER ANALYST RESEARCH NEW-YORK 30007839 FRANCIS A KING PRESIDENT ACCOUNTING NEW-YORK 50007902 JENNIFER D FORD ANALYST RESEARCH DALLAS 3000student@r111wslin01 ~ $
Решение 2:
- Поскольку зарплата является последним полем строки файла query1, возможно, можно просто потребовать, чтобы три нуля были последними символами строки и сформулировать регулярное выражение таким образом: "000$". Однако, такое решение может наткнуться на неочевидное препятствие. Все зависит от того, какими средствами был подготовлен исходный файл query1 (особенно, если он был перенесен из другой системы).
Дело в том, что разные программы и редакторы используют разные способы перевода строки, и в конце строки могут оказаться некоторые дополнительные (невидимые "невооруженным глазом" символы. Таким образом, последний 0 в зарплате может еще не быть последним символом строки. Как правило, увидеть эти дополнительные символы можно, выполнив команду cat с опцией -v. В этом случае на выдаче команды cat можно увидеть непечатный символ, показываемый, например, как: "^M". - Следующие протокол иллюстрирует этот случай:
student@r111wslin01 ~ $
grep "000$" query1student@r111wslin01 ~ $
cat -v query17369 JOHN Q SMITH CLERK RESEARCH DALLAS 800^M7499 KEVIN J ALLEN SALESPERSON SALES CHICAGO 1600^M7505 JEAN K DOYLE MANAGER SALES NEW-YORK 2850^M7506 LYNN S DENNIS MANAGER SALES DALLAS 2750^M7507 LESLIE D BAKER MANAGER OPERATIONS NEW-YORK 2200^M7521 CYNTHIA D WARD SALESPERSON SALES CHICAGO 1250^M7555 DANIEL T PETERS SALESPERSON SALES NEW-YORK 1250^M7557 KAREN P SHAW SALESPERSON SALES NEW-YORK 1250^M7560 SARAH S DUNCAN SALESPERSON SALES DALLAS 1250^M7564 GREGORY J LANGE SALESPERSON SALES DALLAS 1250^M7566 TERRY M JONES MANAGER RESEARCH DALLAS 2975^M7569 CHRIS L ALBERTS MANAGER RESEARCH NEW-YORK 3000^M7600 RAYMOND Y PORTER SALESPERSON SALES NEW-YORK 1250^M7609 RICHARD M LEWIS STAFF OPERATIONS DALLAS 1800^M7654 KENNETH J MARTIN SALESPERSON SALES CHICAGO 1250^M7676 DENISE D SOMMERS STAFF OPERATIONS CHICAGO 1850^M7698 MARION S BLAKE MANAGER SALES CHICAGO 2850^M7782 CAROL F CLARK MANAGER ACCOUNTING NEW-YORK 2450^M7788 DONALD T SCOTT ANALYST RESEARCH DALLAS 3000^M7789 LIVIA N WEST SALESPERSON SALES DALLAS 1500^M7799 MATTHEW G FISHER ANALYST RESEARCH NEW-YORK 3000^M7820 PAUL S ROSS SALESPERSON SALES BOSTON 1300^M7839 FRANCIS A KING PRESIDENT ACCOUNTING NEW-YORK 5000^M7876 DIANE G ADAMS CLERK RESEARCH DALLAS 1100^M7900 FRED S JAMES CLERK SALES CHICAGO 950^M7902 JENNIFER D FORD ANALYST RESEARCH DALLAS 3000^M7916 GRACE M ROBERTS ANALYST RESEARCH NEW-YORK 2875^M7919 MICHAEL A DOUGLAS CLERK RESEARCH NEW-YORK 800^M7934 BARBARA M MILLER CLERK ACCOUNTING NEW-YORK 1300^M7950 ALICE B JENSEN CLERK SALES NEW-YORK 750^M7954 JAMES T MURRAY CLERK SALES DALLAS 750^Mstudent@r111wslin01 ~ $
Решение 3:
- Уточним логику предыдущего решения, оказавшегося неправильным. За тремя нулями перед концом строки может следовать (а может и не следовать) еще один символ, отличный от значащей цифры:
2. "000[^0-9]\{0,1\}"
- Протокол выполнения:
student@r111wslin01 ~ $
grep "000[^0-9]\{0,1\}" query17569 CHRIS L ALBERTS MANAGER RESEARCH NEW-YORK 30007788 DONALD T SCOTT ANALYST RESEARCH DALLAS 30007799 MATTHEW G FISHER ANALYST RESEARCH NEW-YORK 30007839 FRANCIS A KING PRESIDENT ACCOUNTING NEW-YORK 50007902 JENNIFER D FORD ANALYST RESEARCH DALLAS 3000student@r111wslin01 ~ $
[1] Граф — это пара
, где
— это множество вершин
, а
— множество рёбер
. Граф называется ориентированным или направленным, если
. Ребра направленного графа на диаграмме обозначаются стрелками.
[2] Говорят что граф содержит цикл, если начиная с некоторой вершины, переходя по рёбрам, можно каким-либо образом вернуться в эту же самую вершину.