Язык обработки данных AWK

         

Административные ограничения


В отличие от вашего персонального компьютера, машины CONVEX являются многопользовательскими и, в силу этого, имеют определенные ограничения на использование ресурсов пользователями.

Кроме жестких ограничений на ресурсы, существуют также ``правила хорошего поведения''. Все это вкратце изложено ниже.



Адресация в командах SED


С помощью адресации происходит отбор строк для редактирования.

Адрес:

Десятичный номер строки;

$ - последняя строка input ;

Регулярное выражение.

Если адреса не указаны, то команда применяется ко всем pattern space;

Если присутствует один адрес, то команда применяется ко всем тем pattern space, куда попадает этот адрес;

Если указаны два адреса, то они ограничивают область применения команды.



Application Compiler


Средство поддержки программных проектов. По кругу решаемых задач средство близко к make, но является более развитым с точки зрения различных способов оптимизации отдельных частей проекта.



Архивация файлов




Архивацию файлов не следует путать с компрессией: при архивации содержимое нескольких файлов сливается в один файл специальной структуры, но сжатия данных не происходит. Стандарной утилитой архивации является tar. Ключи команды:

c создать архив

t просмотреть

x извлечь из архива

v выдавать на экран дополнительную информацию о файлах

f filename использовать файл filename в качестве архива

Приведем несколько наиболее показательных примеров использования команды tar:

% tar cvf mydata.tar *

Создает архив mydata.tar и записывает в него все содержимое текущего каталога (с рекурсивным спуском в подкаталоги. При работе выводит имя каждого из архивируемых файлов (ключ v).

% tar tvf mydata.tar

Просматривает архивный файл mydata.tar и выводит имя всех файлов в архиве на терминал.

%tar xvf mydata.tar

Раскрывает в текущий каталог содержимое архива mydata.tar (создавая при необходимости подкаталоги).

%tar xvf mydata.tar foo.txt

Ищет в архиве mydata.tar файл с именем foo.txt и (если он есть) достает его из архива.

Часто комбинируют компрессию с архивацией, например так:

% tar cvf mydata.tar *

% compress mydata.tar

В результате имеем сжатый архив mydtata.tar.Z. Все остальные файлы в текущем каталоге можем удалить.



Арифметические выражения


Выражение:

Переменная;

Число;

Строка;

Встроенная функция;

Выражение &lt Операция&gt Выражение.

&lt Операция&gt : "+", "-", "*", "/", "%"



AVS


Application Visualization System - графическая среда визуализации пользовательских массивов данных. Имеет встроенные средства обработки и просмотра побитовых картинок, графиков и геометрических объектов. Библиотека системы содержит около сотни модулей обработки и графического представления данных, что позволяет решить практически все проблемы визуализации (от графиков до многомерных векторных полей). Система имеет средства анимации.

AVS позволяет легко импортировать данные произвольной структуры. Система является ``открытой'', т.е. пользователь имеет возможность написать свой модуль обработки/генерации данных и подключить его к библиотеке AVS.

Система работает в графической среде X Window.



BEGIN и END


Образец BEGIN указывает на начало input или на те действия, которые должны быть выполнены до какого бы то ни было анализа строк. Образец END указывает на конец input или на те действия, которые должны быть выполнены после обработки всех строк.

Например:

BEGIN {FS = ":"} - Устанавливает разделитель полей в ":" до начала обработки строк. Эквивалентно опции "-F:" при AWK вызове.

END { print NR } - Печатает номер последней строки input, т.е. количество обработанных входных строк.



Борьба с нежелательным разрывом страницы


Возможны случаи, когда нежелательно разбивать на части некоторый текст, тогда используйте запрос

.ne

Например: сохранить на странице следующие 7 строк

.ne 7



Буферы vi


Редактор имеет три типа буферов: буфер стирания (0-9), неименованный буфер и именованные буферы (a-z).

В буферы стирания автоматически заносятся стираемые элементы. В буфере 0 хранится последний стертый элемент, в буфере 1 - предпоследний и т. д.

Занести в буфер:

yy - занести текущую строку в неименованный буфер

yдвижение курсора - занести указанный движением курсора блок текста в неименованный буфер.

"ayy - занести текущую строку в именованный буфер a

"Ayy - добавить текущую строку к содержимому именованного буфера a

"by10j - занести последующие 10 строк в именованный буфер b

Вставить из буфера:

p - вставить в текущую позицию содержимое неименованного буфера

"ap - вставить в текущую позицию содержимое именованного буфера a

"1p - вставить в текущую позицию содержимое буфера стирания 1



Цикл foreach


Это чрезвычайно полезный оператор, позволяющий организовать цикл по элементам массива слов

foreach varname ( list )

...

end

Тело цикла выполняется столько раз, сколько элементов в массиве list. При этом переменная varname содержит очередное значение элемента массива. Пример

foreach color ( blue red green )

echo The color is $color

end

Более содержательный пример: переименовывает все файлы в текущей директории с суффиксом .for в файлы с суффиксом .f.

foreach file ( *.for )

echo Renaming $file

mv $file `basename $file .for`.f

end

Здесь использована стандартная команда basename, которая ``отрезает'' у слова, заданного в первом аргументе суффикс, заданный вторым аргументом и выводит получившееся слово на стандартный вывод. Об использовании обратных кавычек в языке C-shell будет рассказано несколько позже.



Цикл while


while ( expr )

...

end

Цикл выполняется до тех пор, пока условие истинно. Пример:

while ( $#files &gt 0 )

echo $files[0]

shift files

end



CONVEX Consultant


Пакет CONVEX Consultant содержит набор традиционных для UNIX средств отладки и профилирования программ.

csd - Мощный отладчик, позволяет отлаживать программы на FORTRANE и C в терминах исходных текстов

prof - простой профилировщик: позволяет оценить время, затраченное на выполнение отдельных блоков программы и, таким образом, найти наиболее ресурсоемкое место программы.

gprof - более изощренный профилировщик. Позволяет проанализировать взаимосвязанность блоков программы.

dump - утилита анализа причин аварийного разрушения задачи. Информирует о причине аварийного снятия задачи с выполнения и о приблизительном месте программы, где возникли проблемы.



CXbatch


CXbatch является системой пакетной обработки заданий. Создана на базе пакетной системы NQS фирмы Sun Microsystems. Идея пакетной обработки заключается в том, что система выстраивает из поступающих запросов очередь. Поскольку задания в очереди имеют пониженный приоритет, они не мешают интерактивной работе пользователей. Более того, система следит за текущей степенью загрузки машины и таким образом получает возможность сглаживать пиковые нагрузки. В ряде случаев пакетное задание пользователя может быть автоматически перемещено на другую машину (если она загружена меньше).

С точки зрения пользователя все это приводит к более быстрому завершению его пакетной задачи.

В настоящее время в CXbatch сконфигурированы три очереди. Очереди различаются приоритетом выполнения и лимитом на системные ресурсы.

short - самая быстрая очередь. Задания имеют самый высокий приоритет. Эта очередь имеет самое сильное ограничение на CPU-ресурс: не более 30 минут на задачу.

long - длинная очередь. CPU-время ограничено 120 минутами.

verylong - очень длинная очередь. Задания имеют самый низкий приоритет, нет ограничения на время счета. Именно в эту очередь ставьте тяжелые задачи (для счета ``на ночь'').

Краткий обзор команд:

qsub - послать задание в очередь,

qdel - снять с выполнения пакетное задание,

qps - получить справку о текущих задачах в пакетной системе.



CXdb


Интегрированное средство отладки программ. Имеет развитой пользовательский интерфейс: для алфавитно-цифровых терминалов это оконная система ``Maryland windows'', для X-терминалов - графическая оболочка. Система команд напоминает csd. Данный отладчик является специфическим для машин CONVEX средством.



CXpa


Интегрированное средство профилирования программ. Имеет развитой интерфейс пользователя: для алфавитно-цифровых терминалов это оконная система ``Maryland windows'', для X-терминалов - графическая оболочка. Специфичен для машин CONVEX.



Дисковая квота


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

Подробнее, дисковая квота определяется двумя величинами: ``мягкий предел'' и ``жесткий предел''. При этом жесткая квота несколько больше мягкой.

Система никогда не позволит вам превысить жесткий предел. При превышении же мягкого предела вы будете постоянно информироваться системой о том, что ``вы превысили квоту на XXX килобайт''. Рекомендуем вам побыстрее очистить дисковое пространство. Если же в течении нескольких дней вы не снимете проблему, система автоматически снизит величину жесткой квоты до значения мягкой. После этого работать в системе практически невозможно.

Если возникли проблемы с местом, вот вам несколько советов:

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

удалите ненужные объектные файлы

отладчик CXdb создает директорию с именем .CXdb куда складывает рабочую информацию. Если вы закончили отладку, сотрите директорию вместе со всем содержимым: rm -r .CXdb.

временно не нужные файлы соберите в архив с помощью команды tar и сожмите компрессором compress.

Посмотреть свою квоту вы можете командой quota.



Добавить стороки, содержащие "olga", "mike" или "mal" соответственно к файлам: folga, fmike, fmal


SED: /olga/w folga

/mike/w fmike

/mal/w fmal (16.1 c.)

AWK: /olga/ {print &gt "folga"}

/mike/ {print &gt "fmike"}

/mal/ {print &gt "fmal"} (46.4 c.)



Добавить строки, содержащие "olga", "mike" или "mal" соответственно к файлам: folga, fmike, fmal


SED: /olga/w folga

/mike/w fmike

/mal/w fmal (16.1 c.)

AWK: /olga/ {print &gt "folga"}

/mike/ {print &gt "fmike"}

/mal/ {print &gt "fmal"} (46.4 c.)



Двухколонный формат


Если вы хотите разместить текст в более узких колонках, можно отпечатать документ в двухколонном формате с помощью команды .2C из текста ms . Затем использовать команду .1C , чтобы вернуться к одноколонному формату:

.2C

.LP

ddddddddddddddddddd dddddddddd dddddddddd

ddddddddddd dddddddddd dddddddddd

ddddddddddddddddddddddd. dddddddddd dddd.

.1C

.LP

sssssssssssssssss sssssssssssssssssssssss

sssssssssssssssssss sssssssssssssssssssssss

sssssss. ssssssssss.

Есть еще способ быстрого получения двухколонного формата. Чтобы быстро получить пример двухколонной печати, сделайте копию своего файла (например: disk ) и назовите его disk.2C , затем начните сеанс редактирования с файлом под именем disk.2C и добавьте нужные запросы. Когда запросы на форматирование вставлены в соответствующее место, выполните следующую командную строку:

% nroff -ms disk.2C | col

ваш текст будет распечатан в два столбца.



Формирование параграфа (раздела) .РР


Стандартный раздел смещает первую строку на 5 пробелов и выравнивает все строки по правому краю.



Функции SED


(В скобках указывается максимальное число адресов)

(1) a \text - Добавить "text" после указанной строки (вывести), потом считать следующую.

(2) b label - Перейти на метку, устанавливаемую, с помощью функции ":" , если label пуст, то перейти в конец скрипта.

(2) c \text - Удалить pattern space и вывести "text" на output .

(2) d - Удалить pattern space .

(2) D - Удалить pattern space до вставленной newline .

(2) g - Заместить содержимое pattern space содержимым буфера hold space .

(2) G - Добавить к содержимому pattern space содержимое буфера hold space .

(2) h - Заместить содержимое буфера hold space на содержимое pattern space .

(2) H - Добавить к содержимому буфера hold space содержимое pattern space .

(1) i \text - Вывести текст на output перед указанной строкой.

(2) n - Вывести pattern space на output и считать следующую строку.

(2) N - Добавить следующую строку к pattern space , разделяя строки вставленным newline .

(2) p - Скопировать pattern space на output .

(2) P - Скопировать pattern space до первой вставленной newline на output .

(1) q - Переход на конец input . Вывести указанную строку, (если нет флага -n ) и завершить работу SED .

(2) r rfile - Читать содержимое rfile и вывести его на output прежде чтения следующей строки.

(2) s - Функция контекстной замены. (См. 5.)

(2) t label - Перейти на метку, устанавливаемую с помощью функции ":" , если для этой строки была осуществлена замена с помощью функции "s" . Флаг осуществления замены восстанавливается при чтении следующей строки или при выполнении функции "s" .

(2) w wfile - Добавить pattern space к концу файла wfile . (Максимально можно использовать до 10 открытых файлов.)

(2) x - Поменять местами содержимое pattern space и буфера hold space .

(2) y /str1/str2/ - Заменить все вхождения символов из str1 на соответствующие из str2 . Длины строк должны быть равными.

(2) ! func - Применять функцию func (или группу функций в {} ) к стокам НЕ попадающим в указанные адреса.

(0) : label - Устанавливает метку для перехода по "b" и "t" командам.

(1) = - Выводит номер строки на output как строку.

(2) { - Выполняет функции до "}" , только когда выбрано pattern space . Группировка функций.

(0) - Пустая команда игнорируется.

# - Комментарий.

( "#n" в скрипте равносильно установке флага -n )



Функция контекстной замены


Формат:

(2)s/&lt Регулярное выражение &gt /&lt Замена &gt /&lt флаги &gt

Функция s заменяет вхождение &lt Регулярного выражения &gt в pattern space на &lt Замену &gt .

&lt Регулярное выражение &gt : Аналогично выше данному, но может быть заключено не в "/ /" а в любые другие символы (не " " (пробел) и не newline ).

&lt Замена &gt : Любой набор символов. Используются специальные символы:

"&amp " - Заменяется на строку, указанную в регулярном выражении.

"\d" - , где d - цифра, указывает на d -тое выражение, заключенное в "\(","\)" в регулярном выражении.

&lt Флаги &gt :

g - Глобальная замена: заменить все вхождения в строке.

p - Печатать (выводить на output ) строки, в которых была осуществлена замена.

w wfile - Выводить в файл wfile строки, в которых была осуществлена замена.

Примеры:

s/to/by/w changes - Заменить в тексте первое вхождение "to" в каждой строке, если таковое есть, на "by" и измененные строки сохранить в файле "changes" .

/iiii/s/[Oo]lga/ Olga V.Galina/p - Заменить в тексте, в строках, где встречается вхождение "iiii" , первое вхождение подстроки "olga" или "Olga" на " Olga V.Galina" , при этом измененные строки выводить на печать.

s/[.,;:?]/*sign&amp *sign&amp **/g - Заменить в тексте каждое вхождение одного из знаков ".,;:?" в строку на "*sign&amp *" , где &amp будет тем знаком, который стоял прежде, например, "." на "*sign.*" , "?" на "*sign?*" и т. д.



Группа поддержки пользователей


Если у вас возникли проблемы с доступом на компьютер или с использованием прикладного или системного математического обеспечения, обращайтесь в соответствующую группу поддержки:

adm-sos@csa.runnet.ru - группа администрирования пользователей. Обращайтесь сюда если возникли проблемы с доступом (типа ``забыл пароль'')

soft-sos@csa.runnet.ru - поддержка прокладного математического обеспечения (FORTRAN, C, AVS, и т.д.)

sys-sos@csa.runnet.ru - системная группа.



Идентификация интерпретатора


Проще всего осуществить запуск оболочки в режиме исполнения некоторого файла mycommand придав этому файлу атрибут исполняемости командой chmod:

% chmod +x mycommand

Теперь достаточно ввести с клавиатуры команду mycommand и ОС автоматически запустит shell в командном режиме исполнения данного файла. В таком пути есть один подводный камень: командных интерпретаторов в системе много и синтаксис команд у них разный. Как ОС определит нужный вам? Ответ - никак. Вы должны явно указать ОС какой интерпретатор вы хотите запускать для исполнения данного командного файла. Для этого первая строчка вашего файла должна иметь следующий стандартный вид:

#! /bin/csh

что и позволит ОС правильно поступить. Если же вы не задали этой информации, то ОС будет считать (по историческим причинам), что файл написан на языке Bourne shell и вы вероятнее всего получите множество сообщений о синтаксических ошибках.

Заметим еще одно полезное свойство работы оболочки в командном режиме: все строки, начинающиеся со знака # будут проигнорированы. Это позволяет вносить в текст командного файла комментарии.

Следующий факт позволяет вам работать с командной строкой средствами csh: при запуске командного файла mycommand автоматически становится определенной внутренняя переменная с именем argv, представляющая массив параметров командной строки. Например, следующий командный файл просто выводит все свои аргументы и их количество на терминал:

#! /bin/csh

#

# This file simply outputs its arguments

# and the total number of arguments

#

echo Arguments: $argv

echo Number of arguments: $#argv



Использование сносок


Установка сноски при помощи запросов:

.FS и .FE

Нужно набрать сноску справа от символа ссылки на нее и между командами сноски .FS и .FE . Средства пакета MS выделят место для примечания в конце страницы и напечатают разделитель между сноской и последней строкой основного текста. Пример:

.QP "I'n not a crook"*

"I'n not a crook"* .

.FS .

*Report,1974 .

.FE -----------------

.PP *Report, 1974



Изменение даты


Команда: .ND

Если вы хотите изменить дату, поместите команду .ND рядом с началом текстового файла. Если вы хотите использовать некоторую дату, отличную от текущей, введите команду: .DA , набрав желаемую дату после .DA

.DA September 15, 1994



Изменение футера


Футер - особая строка под текстом внизу страницы. Вы можете поместить в любую из трех позиций этой строки:

.LF - левый край;

.MF - центр;

.RF - правый край

Пример:

.PP

.ds LF Confidential

.ds RF Internal Use Only



Изменение заголовка


Заголовок (особая строка над текстом вверху страницы) обычно остается в документе фиксированным. Вы можете поместить текст заголовка, на всех страницах в любую из трех позиций этой строки: в левый край, по центру, в правый край. Для каждой из этих позиций команда nroff имеет соответствующую строковую переменную.

.LH (левый заголовок);

.CH (центрированный заголовок);

.RH (правый заголовок)

по умолчанию переменная .CH содержит номер страницы, а две другие ничего не содержат. Чтобы изменить любую из этих переменных, используйте команду nroff .ds (определить строку). Пример:

.PP

.ds LH Draft Copy

.ds RH Revision 3

В данном случае мы заголовок текста Draft Copy поместим слева, а Revision справа и номер страницы разместим в середине.



Явный запуск


Вы можете применить более прямой, но менее удобный способ запуска командного файла - вызвав shell с ключом -c filename. Пример:

% /bin/csh -c mycommand arg1 arg2 arg3...

где сразу же за ключом должно следовать имя запускаемого файла. Требуемые аргументы указываются после. Отметим, что при таком способе запуска файл может и не иметь атрибута исполняемости.



Кавычки


В синтаксисе shell кавычки играют важную роль. Есть три типа кавычек: простые ('), двойные (") и обратные (`).

Простые кавычки используются для выделения текста, который оболочка должна понимать буквально. Иными словами, текст внутри простых кавычек не подлежит раскрытию и интерпретации. Пример:

echo 'Dollar is $good'

получим букально Dollar is $good несмотря на то, что знак доллара является метасимволом оболочки.

Двойные кавычки выделяют строку символов, которую оболочка будет считать одним словом. Пример:

set colors="green blue red"; echo $#colors

выдаст цифру 1, что означает, что переменная colors простая, а не массив. Все что находится внутри двойных кавычек подлежит интерпретации оболочкой.

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

set mytty=`tty`

занесет в переменную mytty ту строку, которую выдает команда tty (а именно имя и номер текущего терминала).



Кириллические тексты


К сожалению, в России широко используются сразу несколько различных способов кодировки кириллических текстов. Перечислим наиболее популярные кодировки:

KOI8 - используется на терминалах больших машин и в UNIX-системах. Принята за стандарт при пересылке электронной почты в сети Relcom.

ISO - кодировка принятая в некоторых UNIX-системах.

Alt - альтернативная кодировка, используется на DOS-компьютерах.

Win - кодировка MS Windows, используется при русификации ОС Microsoft Windows. В качестве стандарта для машин CONVEX используется кодировка KOI8. Как нетрудно догадаться, тексты, сгенерированные в одной кодировке, не могут быть прочитаны на компьютерах, использующих другую. Отсюда возникает множество неудобств.

Несколько смягчить остроту проблемы помогают программы перекодировки. Перечислим имеющиеся перекодировщики:

koi2alt, alt2koi - перекодирование из KOI8 в Alt и обратно

koi2win, win2koi - перекодирование из KOI8 в Win и обратно

koi2iso, iso2koi - перекодирование из KOI8 в Win и обратно

koi2strp - преобразование кириллического текста в KOI8 кодировке в фонетически соответствующий английский текст.



Командная строка


:q или :q! - выход из редактора без сохранения изменений

:x - выход из редактора с записью, если файл был модифицирован

:w или w filename или w! filename - запись файла и возвращение в командный режим

:e filename или :e! filename - загрузка файла filename

:r filename - добавить содержимое указанного файла к редактируемому сразу за текущей строкой

:set nu - включить нумерацию строк

:set nonu - отключить нумерацию строк

:!command - выполнить команду UNIX не покидая редактора

:/word - выполнить поиск слова word в тексте

:/ - повторить поиск слова word далее по тексту



Командный режим


В этом режиме символы клавиатуры выполняют специальные функции (перемещение курсора, стирание частей текста, и т. д.), то есть функции редактирования.

Набираемые команды НЕ ОТОБРАЖАЮТСЯ НА ЭКРАНЕ!



Команды


i - переход в режим набора методом вставки перед текущим символом

a - переход в режим набора методом вставки за текущим символом

R - переход в режим набора текста методом набивки.



Комбинация образцов


Допускается логическая комбинация образцов с использованием следующих знаков: - ``или'', &amp &amp - ``и'', ! - ``не''.

Последовательности образцов, соединенных одним из знаков читаются слева направо.

Комбинация: ``образец1, образец2'' указывает, что действие выполняется над строками, попадающими в указанный ранг: то есть, начиная от строки, удовлетворяющей ``образец1" и вплоть до строки, удовлетворяющей ``образец2", включая ее саму.

Например:

/02\.95/ &amp &amp ($1 !~ /\.su/ $2 !~ /\.su/) - Указывает на строки, содержащие 02.95 и не имеющие .su одновременно в первом и во втором поле.

NR == 100, NR == 200 - Указывает строки с номерами от 100 до 200.



в текст нужно ввести некоторый


Если в текст нужно ввести некоторый комментарий:
\" текст

Компилятор C


Компилятор CONVEX C является ANSI-совместимым оптимизирующим компилятором с языка C. Компилятор поддерживает директивы векторной и параллельной оптимизации, а также может осуществлять автоматическую векторную/параллельную оптимизацию. Пример вызова:

% cc -o setka -O1 setka.c method.c mathmod.o mlib.a

В данном примере компилятор вызван на построение исполняемого модуля setka из следующих входных файлов

setka.c и method.c - тексты программ на C

mathmod.o - объектный модуль с подпрограммами

mlib.a - библиотека объектных модулей

Ключ -O1 указывает компилятору провести оптимизацию уровня 1 (машинно-зависимая оптимизация и оптимизация на уровне базовых блоков).



Компилятор FORTRAN


Компилятор CONVEX FORTRAN является оптимизирующим компилятором с языка FORTRAN. Компилятор может работать в режимах совместимости с

FORTRAN 90

CRAY FORTRAN

FORTRAN 77

Компилятор поддерживает директивы векторной и параллельной оптимизации, а также может осуществлять автоматическую векторную/параллельную оптимизацию. Пример вызова:

% fc -o setka -O2 setka.f method.f mathmod.o mlib.a

В данном примере компилятор вызван на построение исполняемого модуля setka из следующих входных файлов

setka.f и method.f - тексты программ на языке FORTRAN

mathmod.o - объектный модуль с подпрограммами

mlib.a - библиотека объектных модулей

Ключ -O2 указывает компилятору провести оптимизацию уровня 2 (машинно-зависимая оптимизация, оптимизация на уровне базовых блоков и автоматическая векторная оптимизация).



Компрессия файлов


Сжатие файлов помогает увеличить свободное дисковое пространство. Стандартным средством сжатия является утилита compress. Формат вызова:

% compress filename

В результате ее работы файл будет сжат и к его имени добавится суффикс .Z (файл-оригинал будет стерт). Программа компрессии достаточно эффективна.

Обратное действие выполняет команда

% decompress filename

Обращаем внимание, что указанные утилиты сжимают индивидуальные файлы. Иногда требуется создать архив из многих файлов, включая содержимое поддиректориев. Для этих целей в ОС UNIX имеется отдельная программа-архиватор tar.



Локальный терминал


В аудитории No 203 четвертого корпуса Технического университета развернут класс алфавитно-цифровых терминалов компьютеров CONVEX. Класс является ресурсом общего доступа. Режим работы терминального класса:

10:0018:00 ежедневно, кроме субботы, воскресенья и общевыходных дней.

При включении терминала вы увидите приглашение терминального сервера ByPlex. Сервер позволяет подключить терминал к любой из машин в кластере и понимает три команды:

help - выдача краткой помощи по командам ByPlex

quit - выход из ByPlex

connect host - команда соединения с указанной машиной.

Последняя команда является единственно полезной. При регистрации администратор сообщает вам три атрибута:

сетевое имя машины, на которой вы будете работать,

ваше имя в системе ( login), и

ваш пароль входа (храните пароль в тайне).

Сетевое имя машины вы и должны указать аргументом команде connect, чтобы соединиться с нужной машиной и начать процедуру входа в систему.

Соединившись с машиной вы получите приглашение типа

ConvexOS 10.1 (c1)

login:

в ответ на которое вы вводите свое имя ( login). Далее система попросит ввести пароль, и (если вы его не забыли и правильно ввели) вы проходите в машину и можете начинать работу.

Кроме терминалов в классе имеются персональные компьютеры, предназначенные для переноса файлов.



Макропакет MS


Далее мы остановимся на использовании макропакета MS. Командная строка:

% nroff -ms [ options ] file

Чтобы помочь начинающим пользователям и обеспечить стандартные наборы форматов, проектировщики создали стандартные средства, называемые макропакетами. Наиболее известными пакетами являются MS, ME и MM. Кроме того существуют несколько препроцессоров, которые обрабатывают специальные типы текстов:

tbl - для таблиц;

eqn и neqn - для математических выражений.

Существуют утилиты:

checked - для проверки работы препроцессоров eqn и neqn ;

deroff - для удаления всех форматирующих команд ( nroff , tbl , eqn , neqn ).

Макропакет MS запускается с помощью опций в командной строке nroff.

% nroff -ms [ options ] file ...

Препроцессоры такие как tbl (для таблиц) eqn и neqn (для математических выражений), активизируются отдельными командами, которые посылают текст в nroff через конвейер, например:

% tbl file | nroff -ms

Макропакет MS предоставляет широкий выбор заранее определенных средств форматирования текста, которые вы можете активизировать и дезактивизировать, помещая встроенные команды (или запросы) в свой файл.

Каждая встроенная команда MS (или запрос) состоит из точки в колонке 1, за которой следует одна или две прописные буквы (этим отличаются данные команды от команд nroff, которые записаны строчными буквами). Ниже рассмотрим некоторые форматирующие команды более подробно.



Массивы


Допускается использование массивов. Массивы не объявляются, а принимают значения из контекста, например:

x[NR] = $0 - элементу массива x, индексированному NR, присваивается обрабатываемая строка.

x["apple"] - элементы массива могут индексироваться не числовым значением, т.е. строкой.



Многооконное редактирование


Редактировать сразу несколько файлов можно либо пользуясь командной редактора :e filename, либо указав все необходимые файлы в командной строке при вызове редактора (например: vi file1 file2 file3). В последнем случае вы двигаетесь по списку файлов с помощью команд:

:n - переходим к следующему файлу в списке

:rew - возвращаемся к редактированию первого файла в списке

Именованные буферы сохраняют свое содержимое при переходе к редактированию другого файла.



Многовариантный условный оператор


Синтаксис условного оператора switch в C-shell таков

switch (string )

case pattern1 :

...

breaksw

case {\it pattern2} :

...

breaksw

...

default:

...

endsw

Оператор позволяет передавать управление в зависимости от того, удовлетворяет ли строка string какому-либо шаблону из набора pattern1, pattern2, ...( в этом случае управление передается в блок, ограниченный case ... breaksw) или нет (в этом случае управление передается на ветвь default:... endsw. В целом, оператор switch очень похож на аналогичный опреатор языка C. Такие конструкции часто используются в командных файлах для анализа ответа пользователя на заданный вопрос ([Yes/No]).



МОДИФИКАЦИЯ ФАЙЛА


Для того, чтобы осуществить модификацию (с помощью редактора текста) содержимого исходного файла, находящегося под управлением инструментального средства SCCS , необходимо ввести следующую командную строку:

% get -e s. file

В результате этого, в текущем каталоге появится файл, доступ к которому разрешен и по чтению, и по записи, представляющий собой копию оригинального исходного файла, а также будет создан рабочий файл инструментального средства SCCS ( p.file ). После того, как редактирование исходного файла завершено, необходимо сообщить об этом инструментальному средству SCCS набрав командную строку

% delta s. file

после этого на экране появится предложение ввести комментарий:

comments ?

По желанию можно ввести текст комментария. После этого инструментальное средство SCCS создает новую версию исходного файла. Команда delta автоматически увеличивает номер версии на единицу. Чтобы вывести на терминал всю последовательность осуществленных преобразований содержимого исходного файла т.е. ``историю развития" файла нужно набрать в командной строке

% prs s. file

Ниже приведем несколько примеров работы с инструментальным средством SCCS .

Пример 1.

Если нужно вызвать для редактирования уже существующий файл s.file версию 1.5 , нужно набрать:

% get -r1.5 -e s.file

далее вызвать редактор vi (для редактирования версии 1.5)

% vi file

после окончания редактирования передать файл программе delta

% delta s.file

Пример 2.

Если нужно передать файл под управление инструментальному средству SCCS впервые и начать нумерацию версий не с 1.1 (по умолчанию), а с версии 5.1

% admin -r5.1 -ifile s.file

Пример 3.

Если нужно вывести содержимое файла s.file версию 1.4 (ранее созданную) на экран

% get -r1.4 -p s.file

Например, если нужно отредактировать уже существующую версию 1.1 , то после редактирования при записи программа delta присвоит номер версии 1.1.1.1.

Рассмотренные здесь примеры демонстрируют лишь небольшую часть возможностей инструментального средства SCCS , тем не менее даже по ним можно уже получить представление об использовании этой системы.

Напомним еще раз о существующих возможностях:

admin - выполняет управляющие функции над закодированным файлом;

get - восстанавливает версию закодированного файла;

delta - помещает новую версию в закодированный файл;

prs - печатает закодированный файл.

Более полную информацию можно получить в man admin , man get , man delta .



Напечатать сначала третье, а затем второе поля каждой строки


SED: /[^ ]* [ ]*\([^ ]*\) [ ]*\([^ ]*\).*/s//\2\1/p (30.5 c.)

AWK: {PRINT $3 $2} (38.9 c.)



Напечатать третье поле каждой строки


SED: /[^ ]* [ ]*[^ ]* [ ]*\([^ ]*\).*/s//\1/p (29.0 c.)

AWK: {PRINT $3} (33.3 c.)



Напечатать все строки, содержащие "olga"


SED: /olga/p (11.6 c.)

AWK: /olga/ (25.6 c.)



Напечатать все строки, содержащие "olga", "mike" или "mal"


SED: /olga/p

/olga/d

/mike/p

/mike/d

/mal/p

/mal/d (15.8 c.)

AWK: /olga\bverb mike\everb mal/ (29.9 c.)



Назначение и Формат использования


AWK - утилита предназначенная для простых, механических и вычислительных манипуляций над данными. Довольно несложные операции часто необходимо выполнить над целыми пакетами файлов, а писать для этого программу на одном из стандартных языков программирования является утомительным и, как правило, не очень простым делом. Оптимальное решение проблемы - использование специальной утилиты AWK, включающей в себя не громоздкий и удобный язык программирования, позволяющий решать задачи обработки данных с помощью коротких программ, состоящих из двух-трех строк.

Утилита AWK изначально объединяла свойства утилит UNIX - sed и grep. В дальнейшем ее возможности значительно расширились. Настоящая документация ограничивается описанием возможностей утилиты AWK реализованной для компьютеров CONVEX. Утилита AWK была создана в 1977г, американскими авторами: Alfred V.Aho, Brian W.Kernighan и Peter J.Weinberger. Подробное описание всех возможностей утилиты AWK для UNIX дает их издание: ``The AWK Programming Language'', 1988.

AWK сканирует input (стандартный или указываемый набор файлов), и над строками, удовлетворяющими заданному образцу, выполняет указываемые действия. Строка может содержать максимально до 256 символов.

Формат:

awk [-Fc] [-f file] [files]

awk [-Fc] [prog] [files]

prog - программа, вида: ' образец ${$действие$}$'

file - файл с AWK-программой:

образец { действие}

образец { действие}

...

files - файлы, предназначенные для AWK-обработки.

-Fc - устанавливает разделитель полей в ``с'' (См. 1.2.1 и 2.4)



Общая структура AWK-программы


1. Язык программирования AWK допускает использование:

Полей;

Переменных (Стандартных, Массивов);

Арифметических выражений.

2. Образец:

Регулярное выражение;

Выражение отношения;

Комбинация образцов;

BEGIN и END.

3. Действие:

Последовательность предложений, разделенных ``;'' или ``\n'' (новая строка)

Предложение:

Вывод (Печать);

Присваивание;

Встроенная функция;

Управляющая структура.



Обзор операционной среды


Войдя в систему, вы попадаете в среду командного интерпретатора csh и получаете примерно такое приглашение

magic%

Подробно командный интерпретатор описан в отдельном пособии. Ниже мы приведем лишь самую краткую сводку команд.



Опции командной строки NROFF


-ms - Использовать макропакет ms ;

-np - Начало номера страницы (установить номер первой страницы = p);

-op - Специальные страницы (распечатать только страницы с номерами, заданными в списке p);

-sn - Остановка вывода между страницами (делать останов после печати каждых n- строк);

-Tname - Определение печатающего устройства.



Основные команды NROFF


.pl - длина страницы;

.ll - длина строки;

.po - отступ страницы;

.pn - номер страницы;

.bp - смена страницы;

.ne - дополнительное требование (сохранение целостности строк);

.sp - вывод пустой строки;

.cen - центрировать строку или n -строк;

.ul - подчеркнуть заголовок;

.cu - непрерывное подчеркивание;

.tin - временный отступ;

.br - переход на следующую строку;

.in n - сделать отступ на n - позиций.

Остановимся немного подробнее на некоторых основных запросах nroff и рассмотрим некоторые базовые встроенные в nroff команды (или запросы) используемые при работе nroff.



Остановка печати после заданной страницы


Останавливать печать после каждой страницы:

% nroff -s text | lpr

Oстанавливать печать каждой 3-й страницы:

% nroff -s3 text | lpr



Пароли


В целях безопасности и защиты от несанкционированного доступа, пользователи должны:

использовать достаточно сложные пароли

ни в коем случае не сообщать свой пароль другому лицу (и, конечно, не записывать его на обложке тетради или на столе у терминала)

время от времени менять пароль

Сложный пароль - это пароль

не совпадающий с login именем

содержащий не менее 8 символов

содержащий символы различных регистров или цифры, наряду с символами нижнего регистра.

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

А. Пароль составляется из нескольких простых слов, разделенных одним из специальных знаков типа !"#;:,.*()_+=|\/?&lt &gt или пробелом, например:

nice$day

see_you&amp later

be@quite

dwa rublya

sasha+masha=love

Б. Пароль составляется из первых букв простой фразы (с соблюдением пунктуации и заглавных букв). Например, бессмертный пионерский девиз ``К борьбе за дело Коммунистической Партии Советского Союза - будьте готовы!'' породит нам отличный пароль:

KbzdKPSS-bg!

Для этого способа очень хорошо подходят также отрывки из стихотворений и песен.

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

Если возникли подозрения, что кто-то получил несанкционированный доступ к вашим ресурсам (появляются ``чужие'' файлы, исчезают или изменяются ваши) немедленно обращайтесь к администратору машины.



Part: Сравнительное решение задач с помощью SED и AWK


Система UNIX обладает несколькими программами, которые обрабатывают входной поток данных: grep, egrep, fgrep, lex и sed. Неинтерактивный редактор sed обеспечивает выполнение в пакетном режиме большинства функций редактирования редактора ed. Как показано на примерах ниже, некоторые задачи обработки текстов могут быть решены как с помощью awk, так и с помощью sed и время решения простых задач с помощью sed будет меньше. Однако, решения некоторых примеров (как 4. и 5.) выглядят более наглядно с использованием awk. Кроме того, утилита awk безусловно шире по своим возможностям и позволяет численные манипуляции с данными, логические отношения, использование переменных и т.п., чего не обеспечивает ни одна из вышеперечисленных программ.



Печать начиная с заданной страницы


Начать печатать на стр. 11 :

% nroff -n11 text | lpr



Переход на новую страницу


Если вы хотите, чтобы конкретный текст начинался с новой страницы, поставьте одну из следующих команд:

.bp - начать новую страницу здесь;

.bp 21 - начать новую страницу здесь и назвать ее 21;

.bp +2 - начать новую страницу и увеличить номер страницы на 2.



Переменные поля


Ссылки на поля $1, $2, ... могут интерпретироваться в качестве переменных, например:

$1 = "3" + $2 - первое поле принимает значение второго поля, увеличенного на 3.

$(i+1) - интерпретируется как поле, номер которого зависит от значения переменной i.



Перемещение курсора


&lt Drawing or tabular insertion skipped...&gt

h,j,k,l - на один символ (одну строку), как показано стрелками

^ или 0 - в начало текущей строки

$ - в конец текущей строки

w - на слово вправо

b - на слово влево

} - на параграф вперед (параграф - это блок текста, отделенный пустой строкой)

{ - на параграф назад

[[ - в начало текста

]] - в конец текста

Кнопки стрелочной клавиатуры также позволяют перемещаться по тексту.



Перенаправление потоков вводавывода


По умолчанию, интерактивные задачи ожидают ввода информации с клавиатуры и выдают результат на экран. Имеется удобный механизм, позволяющий перенаправить ввод и/или вывод в файл. Делается это с помощью операторов ``&lt '' и ``&gt '' в командной строке.

Примеры:

% setka data.txt &gt output.txt

перенаправляет выходной поток задачи setka в файл output.txt. То, что setka выдала бы на экран окажется записанным в файл. Предыдущее содержимое файла будет потерено (если такого файла не было - он будет создан).

% setka data.txt &gt &gt output.txt

то же самое, но поток будет дописан к файлу с сохранением предыдущего содержимого.

% integral &lt input.txt

После такой команды входная информация для задачи integral будет браться не с клавиатуры, а из файла input.txt.



Перенос текстов из DOS в среду ConvexOS


Кроме различия в способе кодирования кириллицы, тексты сгенерированные под DOS отличаются от текстов UNIX (и ConvexOS) способом обозначения конца строки: В DOS конец строки помечается парой символов с кодами 10 и 13. В UNIX конец строки помечается лишь символом с кодом 10.

Программы переноса файлов (типа ftp) имеют соответственно два режима работы: бинарный - файлы передаются дословно, и режим `` ascii'' - файлы считаются текстовыми и автоматически преобразуется признак конца строки. Поэтому, при переносе файлов внимательно следите за режимом передачи. Учтите, что передача нетекстовых файлов данных (например архивов) в режиме ascii приводит к тому, что полученный файл не будет пригоден для использования.

Желаем успешной работы.



Первые шаги: вход в систему


Итак, вы стали (или собираетесь стать) пользователем ЭВМ CONVEX. Получить терминальный доступ к машине вы можете двумя способами:

локально - работая с терминалов машины

удаленно - через сеть

Подробнее рассмотрим эти способы входа.



Поля


Каждая сканируемая строка input рассматривается как состоящая из полей, разделенных разделительными символами (по умолчанию - пробел).

На поля можно ссылаться из AWK программы следующим образом:

$1 - Первое поле;

$2 - Второе поле;

... и так далее...

$0 - Ссылается на всю строку целиком.

Строка может содержать максимально до 100 полей.



Полноэкранный редактор vi


Редактор vi - универсальный полноэкранный текстовый редактор в среде UNIX. Универсальность означает, что, во-первых, этот редактор есть во всех UNIX-подобных ОС и, во-вторых, этот редактор работает с практически любым видом терминала (ANSI, VT100, VT220, VT320, DEC, и т. д.).(База данных, содержащая описание известных системе терминалов находится в файле /etc/termcap.) Эта универсальность обернулась несколько непривычным (для пользователей DOS) пользовательским интерфейсом: для управления редактором используются лишь ``обычные'' кнопки клавиатуры (алфавитно-цифровые символы и знаки препинания).

Имеющиеся на многих типах терминалов функциональные клавиши практически не используются. Если клавиатура терминала имеет стрелочные клавиши, то они используются, но, как будет видно ниже, в ограниченном контексте.



Получение справочной информации


Справочная информация по командам системы вызывается с помощью команды

% man subject

где вместо subject вы указываете имя интересующей вас команды. Например,

% man tar

выдаст справочную информацию о назначении и способах вызова архиватора tar.

Команда info вызывает меню-ориентированную систему помощи по операционной системе CONVEX.

Наконец, если вы не помните точно имени интересующей вас команды, попробуйте спросить

% apropos substr

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



Пользуйтесь пакетной обработкой заданий


В системе не ограничивается количество процессов, которые может запустить пользователь. Поэтому неразумное использование компьютера может привести к его значительным перегрузкам.

Самый простой способ избежать перегрузок - это использование пакетной очереди: сколько бы задач вы не отправляли в очередь, это не может привести к проблемам.

Многие считают, что, обойдя CXbatch, они смогут выиграть в реальном времени счета. Увы, это заблуждение. Следующие рассуждения помогут вам лучше понять систему разделения ресурсов.

Во-первых, не имеет смысла запускать одновременно процессов больше, чем количество CPU в системе. Дело в том, что если в системной очереди на процессор стоит только одна задача, то она целиком (и единолично) загружает этот процессор. Это самый выгодный режим работы задачи в смысле пользователя - реальное время счета минимально. При добавлении лишней задачи, она будет добавлена в очередь и загрузка процессора возрастет, а квант времени, выделяемый на каждую задачу сократится. Это приведет к возрастанию реального времени счета.

Во-вторых, кроме динамичного распределения загрузки процессоров и машин, CXbatch осуществляет последовательное (а не одновременное) выполнение заданий. При этом каждая из задач в очереди выполняется в максимально благоприятном режиме (по возможности одна задача на процессор). Небольшой пример: пусть 10 пользователей хотят просчитать по задаче, каждая из которых требует 1 час CPU-времени. Считаем для простоты машину однопроцессорной. Проанализируем интерактивный и пакетный варианты:

Интерактивный запуск: все пользователи запустили задачи интерактивно. Степень загрузки системы поднялась до 10. Квант времени на каждую задачу составляет 1/10 времени квантования. Все задачи завершаться одновременно через 10 часов. Итак, система загружена до значения 10 в течение 10 часов, каждый из пользователей будет ждать результатов 10 часов.

Пакетный режим: все пользователи поставили свои задания в пакетную очередь. Система пакетной обработки выстроила задания в порядке поступления и запустила на выполнение первую из них. Степень загрузки системы 1, задача выполняется в наиболее благоприятном режиме. Через час первый пользователь получит результат расчета, и будет запущена на выполнение следующая задача. И так далее. В итоге, загруженность системы остается на оптимальном уровне ``1''. Пользователям не придется всем ждать 10 часов (в среднем субъективное время расчета уменьшается до 5 часов).

Итак, пакетная система выгодна в первую очередь самим пользователям. Надо понимать, что пониженный приоритет заданий в очереди является лишь системным средством выравнивания нагрузок и, в конечном счете, помогает более эффективному использованию компьютера (и, как это ни парадоксально, приводит к уменьшению реального времени счета задачи).

Вывод: не запускайте расчетные программы интерактивно (кроме как с целью отладки) и имейте в виду, что в случае перегрузок администратор будет снимать с выполнения запущенные интерактивно пользовательские задачи.



Посчитать количество строк (input)


SED: $= (10.2 c.)

AWK: END { PRINT NR } (15.0 c.)



Повторители


Командам и движениям курсора можно давать повторители (числа), например

2w - передвинуть курсор на два слова вперед

10l - передвинуть курсор на десять символов вправо

d10l - стереть десять символов справа от курсора

2d10l - стереть двадцать символов справа от курсора

5J - слить пять последующих строк в одну

4. - повторить последнюю введенную команду четыре раза



Присваивание


Оператор присваивания имеет вид:

&lt переменная&gt = &lt выражение&gt

Начальное значение переменной 0 или `` '' (пробел). Допускаются другие типы присваивания в соответствии с языком ``С'': "+=","-=","*=","/=","%=".

&lt переменная&gt ++, ++&lt переменная&gt - увеличение значения переменной на 1.

&lt переменная&gt --, --&lt переменная&gt - уменьшение значения переменной на 1.



Работа оболочки в командном режиме


Уже отмечалось, что csh может быть запущена в командном режиме. Более того, условные операторы и операторы цикла чаще используются именно в командных файлах. Здесь мы рассмотрим особенности такой ``командной'' работы.



Работа с файловой системой


Просмотр содержимого текущего каталога осуществляется командой lf. В листинге команды исполняемые файлы будут помечены звездочкой, подкаталоги будут помечены знаком /. Файлы, начинающиеся с символа точки вообще не будут показаны. Чтобы заставить команду показать все файлы, используйте ключ -a. Пример

magic% lf -a

. README

.. Foo.dat

.cshrc a.out*

.login core

.logout katya/

Команда ll показывает содержимое каталога в ``длинном формате'', включая атрибуты доступа к файлу, его владельца, число имен файла, дату создания и размер.

Команда pwd выдает полное имя текущего каталога.

Копирование файлов осуществляется командой cp file newfile.

Сменить имя существующего файла позволяет команда mv oldname newname.

Удаление файлов осуществляется командой rm file. Будьте осторожны: команда rm не спрашивает подтверждения, поэтому `` rm *'' удалит все файлы без лишних бюрократических проволочек.

Создать подкаталог можно командой `` mkdir dirname.''

Удалить каталог (пустой) поможет команда `` rmdir dirname.''

Изменить атрибуты доступа к файлу можно с помощью `` chmod mode file,'' например ``% chmod go-rw secret.txt'' закрывает доступ к файлу secret.txt для всех, кроме его владельца.



Работа с командной строкой


Набираемую пользователем строку интерпретатор воспринимает как команду (или несколько команд). Синтаксис командного интерпретатора позволяет набирать

несколько команд в одной строке, разделяя их точкой с запятой. Например

% cd /tmp; lf

эквивалентно двум последовательно введенным командам:

% cd /tmp

% lf

Наоборот, при желании пользователь может

продолжить набор длинной команды на следующей строке, закончив текущую строку знаком \\. До завершения ввода команды вы будете получать ``вторичное приглашение'' &gt вместо основного (%). Например,

% tar tv Makefile star.o star.c star.dat main.o main.c

эквивалентно

% tar tv Makefile star.o \

&gt star.c star.dat \

&gt main.o main.c

Управление потоками ввода-вывода осуществляется, подобно DOS(Точнее, синтаксис перенаправления потоков ОС DOS восприняла от UNIX) с помощью символов &gt , &gt &gt , &lt , &lt &lt , |. Отметим здесь только следующее: в отличие от DOS при создании программного канала между двумя процессами ОС UNIX запускает оба процесса одновременно и осуществляет передачу информации через системный буфер (без промежуточной записи на жесткий диск). Таким образом, программные каналы в ОС UNIX являются весьма эффективным способом обмена. В случае переполнения системного буфера (например если ``передающая'' программа выдает информацию в канал быстрее чем ее может обработать ``принимающая'' программа) ОС автоматически приостанавливает тот процесс, который осуществляет запись в канал до освобождения буфера.

Полезный частный случай использования механизма перенаправления потоков - перенаправление в /dev/null, что позволяет избавиться от ненужных сообщений на экран. С помощью того же механизма можно создавать пустые файлы:

% cat &lt /dev/null &gt myfile

создаст в текущей директории пустой файл myfile.

Дополнительно C-shell позволяет группировать команды с помощью круглых скобок. В этом случае вся конструкция внутри скобок рассматривается интерпретатором как одна команда.


Сие полезно, например, в таких конструкциях:

% (command1 | command2) &lt myfile

Если же скобки опустить, shell не сможет определить какой из команд вы хотите подать на вход файл myfile.

Следующие ``удобства'' существуют в данной реализации C-shell:

Вы можете не набирать длинную команду до конца, а попробовать после частичного набора команды (или имени файла) нажать клавишу табуляции &lt Tab&gt . C-shell попытается сама дополнить недостающие символы, либо ответит писком, если выбор неоднозначен.

Если вы набрали команду, но забыли ее опции, наберите последовательность &lt Esc&gt H. C-shell выдаст краткую помощь. Например,

% ps&lt EscH&gt

Набирая полное имя файла пользуйтесь комбинацией клавиш ^D. Вы сможете получить листинг набираемого каталога в формате команды lf.

Командный буфер запоминает 20 последних команд. Вместо набора команды вы можете вызвать ее из буфера с помощью стрелочной клавиатуры (конечно только в том случае, если эта команда есть в буфере).


Расположение номера страницы


Команда nroff помещает номер страницы в середине заголовка по умолчанию.

.PP

.ds RF Page %

номер страницы помещается с правой стороны футера и ему предшествует слово Page.



Разбор командной строки


Интерпретатор, получив командную строку, выполняет над ней ряд преобразований, а именно:

Раскрывает псевдонимы ( alias)

Раскрывает метасимволы (*, ?, [, ], ~, {, })

Подставляет переменные shell

Выполняет команду, если она - встроенная команда интерпретатора, или запускает процесс, если команда внешняя.

Разберем эти действия по этапам.

Псевдонимы (alias). Встроенная команда alias позволяет определять псевдонимы команд. Пример:

% alias mycat 'cat | more'

определяет mycat как псевдоним строки cat | more. Поэтому далее вы вправе пользоваться командой mycat, которая будет раскрыта интерпретатором везде, где вы ее используйте. Это - способ определения коротких имен для длинных составных команд.

Встроенная команда unalias mycat уничтожает ранее введенный псевдоним mycat.

Метасимволы. Метасимволы позволяют кратко записывать целые списки слов (главным образом - имен файлов). Shell рассматривает слово, в котором встречаются метасимволы, как шаблон для составления списка имен файлов:

* в шаблоне заменяет любую последовательность символов. Например m* раскроется в список всех файлов, начинающихся с буквы m. Существует небольшое исключение из этого правила: просто * опускает в списке те файлы, имена которых начинаются с точки.

? заменяет один символов. Например m? раскроется в список всех имен файлов, начинающихся с буквы m и состоящих точно из двух букв.

[.-.] позволяет указать интервал для подставляемого символа. Например m[a-e] будет раскрыто в ma mb mc me.

{...,...} позволяет перечислить слова для подстановки. Так, например m{red,blue,green} будет раскрыто в mred mblue mgreen.

Наконец, тильда позволяет указать домашний каталог пользователя:

~name/ эквивалентно указанию полного пути в домашний каталог пользователя name (Скажем, /usr1/name/)

~/ эквивалентно указанию полного пути в ваш собственный домашний каталог.

Переменные shell. Слова, начинающиеся с символа $ командный интерпретатор воспринимает как имена переменных. Переменные делятся на переменные окружения (они будут известны всем вызванным из этой shell программам и являются в этом смысле глобальными) и простые переменные.




Встроенная команда set name= value позволяет определить простую переменную с именем name и дать ей значение value. Встретив в командной строке выражение $name интерпретатор заменит его на value. Например,

% set color=blue

% echo $color

выдаст на терминал строчку blue. А

% set color=blue

% echo new$color

даст newblue. Наконец, введя

% set color=blue

% echo ${color}new

получим colornew. Последний пример демонстрирует как надо использовать фигурные скобки для выделения имени переменной из слова (на echo $colornew интерпретатор бы ответил, что переменная colornew не определена.

Команда unset уничтожает ранее определенные переменные.

Чтобы определить переменную равной строке из нескольких слов, заключите ее в простые кавычки. Пример

% set color='blue or red or green'

Простые переменные могут быть массивами слов (что надо отличать от только что рассмотренного случая, когда переменная содержит строку из нескольких слов. Для объявления массива надо использовать круглые скобки:

% set colors=(blue red green)

Теперь команда echo $colors выдаст строку из трех цветов (попробуйте!). Однако вы можете также работать в отдельными элементами массива (элементы нумеруются с нулевого значения), например так:

% echo $colors[2]

(получим green). Количество элементов в массиве содержится в переменной $#colors.

% echo $#colors

даст на терминал цифру 3.

Возможны довольно сложные комбинации с использованием шаблонов, например:

% set files=(m*)

% echo $#files

выдаст число файлов в текущем каталоге, начинающихся с буквы m.

Переменные окружения вызываются точно также как и простые переменные. Разница заключается в способе их определения:

Команда % setenv name value устанавливает переменную окружения с именем name. Обратите внимание на раздражающую разницу в синтаксисе: определяя переменную окружения не надо ставить знак =.

Список всех переменных окружения можно получить с помощью встроенной команды printenv.

Отменить определения переменной окружения можно с помощью unsetenv.

Наконец, для определения массива переменных окружения НЕ используются круглые скобки, а используются двоеточия в качестве разделителей элементов массива:

% setenv MANPATH /usr/man/:/usr/local/man:/usr/man/X11:~/man


Раздел без отступа .LP


Чтобы сформировать раздел без отступа со строками, выровненными слева и справа (кроме последней) поставьте перед первой строкой команду .LP



Раздел цитат .QP


Чтобы выделить цитату т.е. образовать раздел, выделенный пятью пробелами слева и справа, причем все строки выровнены по левому краю и по правому.



Размер страницы (.pl)


Запрос .pl устанавливает размер страницы которая печатается построчно (высота каждой строки 0.4 см). По умолчанию страница содержит 66 строк (28 см).

Пример:

1. Установить размер страницы 24 строки будет выглядит так:

.pl 24

2. Уменьшить размер страницы на 12 строк

.pl-12

3. Восстановить размер страницы

.pl

4. Установить размер строки 132 символа

.ll 132

5. Увеличить длину строки на 12 символов

.ll+12

6. Восстановить размер строки

.ll

7. Установить отступ страницы 8 символов

.po 8

8. Уменьшить отступ страницы на 2 символа

.po -2

9. Восстановить прежнее значение

.po



Разметка страницы


Стандартный формат страницы при использовании макропакета MS

&lt Drawing or tabular insertion skipped...&gt



Редактирование


dd - стирание текущей строки

dдвижение курсора - стирание от текущего положения курсора до нового, задаваемого символом перемещения курсора(Нажатие кнопок стрелочной клавиатуры НЕ ЯВЛЯЕТСЯ движением курсора и не может использоваться в комбинированных командах.)

J - слияние текущей строки со следующей

u - отмена последней команды

. - повтор последней команды

: - переход в режим командной строки



Редакторы


Стандартным средством редактирования текстов является редактор vi. Обладая несколько непривычным пользовательским интерфейсом, этот редактор является достаточно мощным и, кроме того, имеет то преимущество, что поддерживает широкий набор терминалов. Он имеется практически на всех UNIX-подобных системах. Подробнее о работе с vi смотри соответствующее учебное пособие.

Альтернативным редактором является emacs. Он имеет несколько более развитый (оконный) пользовательский интерфейс.



Регулярное выражение


Для осуществление поиска в AWK языке допускается использование регулярных выражений, определенных в описании SED, (см. ``Неинтерактивный текстовый редактор SED'' 2.1), заключенных в``/ /''. Дополнения к использованию регулярных выражений, допускаемые в AWK-языке:

"( )" - Скобки допускаются для группирования;

" |" - Указание альтернативы "или";

" + " - Плюс, стоящий за регулярным выражением означает любую последовательность вхождений этого выражения, начиная с 1;

" ? " - Знак вопроса за регулярным выражением означает 0 или 1 вхождений этого выражения;

[A-Z] - Допускается сокращенная форма записи для рангов ASCII символов;

Установленный порядок выполнения операторов на одном скобочном уровне: "[] * + ? конкатенация |".

Например:

/Olga/ - Указывает на строки, содержащие Olga.

/[Oo]lga|[Mm]ike|[Mm]al/ - Указывает на строки, содержащие Olga или olga или Mike или mike или Mal или mal.

/number[0-9]/ - Указывает на строки, содержащие number0 или number1 или ... number9.

/\/.+\// - Указывает на строки, содержащие любое количество символов, больше или равное 1, заключенных в / /.



Режим командной строки


Режим командной строки позволяет производить более глобальные операции с текстом: записывать отредактированный текст в файл, считывать новый файл, выходить из vi, производить настройку редактора, поиск по шаблону, а также осуществлять некоторые функции редактирования.

Команды отображаются в нижней части экрана (в ``командной'' строке редактора).



Сдвиг разделов .RS и .RE


Команда .RS используется совместно для сдвига разделов вправо и влево на 5 позиций. Запрос .RS также позволяет вставлять строку перед первой строкой раздела.



Смещенный раздел .IP


Чтобы сформировать раздел, выделенный пятью пробелами слева, а все строки выровнены по левому и правому краям, поставьте перед первой строкой команду .IP . Пример:

Input Output

.LP

ssssssssssssssssss ssssssssssssssssssss

ssssssssssssssssssssssss ssssssssssssssssssss

ssssssssss sssssssssssssss

.IP

ddddddddddddddddddd ddddddddddddddddddd

dddddddddddddd ddddddddddddddddddd

ddddddddd ddddddddd

Чтобы поместить короткую строку (например: число или метку) перед первой строкой раздела, оставьте один пробел после команды .IP и наберите необходимую строку.

Input Output

.IP (1)

ccccccccccccccccccccc (1) ccccccccccccccccccc

ccccccccccccc ccccccccccccccccccc

cccccccccccccccc cccccccccccc

Чтобы поместить более длинную строку перед смещенным разделом, оставьте один пробел после команды .IP , а затем наберите строку, за которой следует число (которое должно быть по крайней мере на единицу больше длины строки). Это число показывает, на сколько колонок следует сдвинуть (отступить) раздел. Если строка содержит пробелы, заключите ее в кавычки:

Input Output

.IP "Part 1" 8 bbbbbbbbbbb

jjjjjjjjjjjjjjjjjj Part 1 jjjjjjjjjjjjjjjjj

jjjjjjjjjjjjjjjj jjjjjjjjjjjjjjjjj

jjjjjjjjjjjjjjjjjjjj jjjjjjjj

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



Список встроенных команд MS


1. Для формирования разделов:

.PP - стандартный раздел;

.LP - раздел без отступа;

.QP - раздел цитат;

.IP - смещенный раздел;

.RS - сдвиг вправо;

.RE - сдвиг влево.

2. Для непрерывного вывода текста на экран:

.DS (.DE) - стандартный вывод;

.DS B (.DE) - сблокированный вывод;

.DS C (.DE) - центрированный вывод.

Тексту должна предшествовать одна из перечисленных выше команд, а за текстом должна находиться команда завершения ( .DE ).

3. Сохранение непрерывного следования строк текста на странице:

.KS (.KE) - стандартное сохранение

4. Использование сносок для печати в конце страницы.

.FS (.FE) - установка сноски;

.\u (\d) - использование подчеркивания.

5. Использование заголовков (для печати заголовков):

.SH - ненумерованные заголовки;

.NH - нумерованные заголовки.

6. Выделение текста (отмена выделения):

.I (.R)

запрос .I производит подчеркивание для выделения.

7. Разметка страниц.

Стандартная разметка страницы для ms есть область печати размером 12х22.5 см на стр. размером - 17х27.5 см., причем в центре вверху помещается ее номер, а в середине строки в конце страницы помещается дата. Используя следующие команды, вы можете сделать некоторые изменения в разметки:

.ND - удалить дату;

.DA - изменить дату;

.ds LH , .ds CH , .ds RH - Изменить заголовок

.ds LF , .ds CF , .ds RF - Изменить футер

% - переместить номер страницы;



Сравнительное решение задач с помощью SED и AWK


Система UNIX обладает несколькими утилитами, которые обрабатывают входной поток данных и позволяют также решать некоторые задачи редактирования: grep , egrep , fgrep , lex и awk . Мощная и многофункциональная утилита awk также может быть применена для простого редактирования текстов, поскольку также основана на использовании регулярных выражений. Однако, как видно из примеров, приведенных ниже, время решения задач с помощью sed значительно меньше по сравнению со временем, затрачиваемым awk . Неинтерактивный редактор sed обеспечивает выполнение в пакетном режиме большинства функций редактирования редактора ed и является оптимальным при решении несложных задач пакетного редактирования.



Таблицы


Программы neqn (для обработки математических формул) и tbl считывают текст из файла стандартного ввода и записывают переработанный текст в файл стандартного вывода. Обрабатываются только участки входного текста, заключенные между парой определенных запросов, остальной текст копируется без изменений. Командная строка выглядит следующим образом:

tbl [ files ] ...

tbl file | nroff -ms

Препроцессор tbl воспринимает простое описание таблицы и генерирует запросы nroff для печати этой таблицы. Запросы препроцессора tbl помещаются между запросами .TS (начало таблицы) и .TE (конец таблицы).

.TS

.

. - описание таблицы

.

.TE

Литеры ; (точка с запятой) и . (точка) должны присутствовать явно, завершая соответствующий раздел. Формат столбцов и строк в общем случае задается шаблоном. Литера Т (табуляция) служит разделителем столбцов: Пример:

.TS

center;

c s s s

c c c c

l l n n.

Отделения фирмы Bell Labs

Название Т Адрес Т Код Т Номер

................

.TE

В разделе описания форматов можно задавать следующие опции:

с - элемент столбца центрируется;

l - элемент выравнивается по левому краю столбца;

n - числовая величина;

r - элемент выравнивается по правому краю столбца;

s - расширенный заголовок. Элемент из предыдущего столбца продолжается и в этом столбце.

Опция center вызывает размещение таблицы посередине страницы. По умолчанию таблица располагается с левой стороны страницы. Внешний вид таблицы задается следующими опциями.

allbox - поместить каждый элемент таблицы в прямоугольную рамку;

box - поместить всю таблицу в прямоугольную рамку;

center - разместить таблицу посередине страницы (по умолчанию таблица будет расположена с левой стороны страницы);

doublebox - поместить таблицу в двойную рамку;

expand - разрядка. Использовать для размещения таблицы всю ширину страницы (текущую длину строки);

tab(x) - в качестве разделителя столбцов использовать литеру х вместо табуляции.

Более подробную информацию вы можете получить в man nroff, tbl , neqn .



Учет использования ресурсов


По каждому пользователю ведется учет использования CPU времени и терминального времени. Что же это такое?

Терминальное время - это время вашей интерактивной работы (от момента входа в систему до момента выхода) с локального или удаленного терминала. Некоторые пользователи любят работать с системой одновременно с нескольких терминалов. Час одновременной работы одного пользователя с N терминалов будет учтен системой как N часов терминального времени. Поэтому, теоретически, можно набрать более 24 часов терминального времени в сутки.

Обсудим что такое CPU-время. Система CONVEX является системой разделения времени между задачами. Поэтому реальное время выполнения задачи зависит от количества заданий в очереди планировщика времени (т.е. от текущей загруженности системы). Объективным показателем использования процессорного ресурса является CPU время - время затраченное процессором именно на вашу задачу.

В однопроцессорных системах CPU-время всегда меньше реального времени выполнения задачи. В многопроцессорных системах это соотношение может быть любым (так как в сутках всего 24 часа реального времени, и N*24 часов процессорного времени, где N - количество процессоров).



Удаленный доступ


Кластер компьютеров CONVEX включен в сегмент локальной сети компьютерного центра и имеет выход в глобальную сеть Internet. Это позволяет пользователям подключаться к машинам CONVEX с любого компьютера, имеющего доступ в Internet. Практически это самый удобный способ доступа, поскольку позволяет вам использовать ресурсы CONVEX прямо со своего рабочего места (конечно, при условии, что ваше рабочее место имеет сетевое соединение).

Для удаленного доступа используются стандартные программные средства коммуникации в сетях TCP/IP ( telnet, ftp, и т.д.). Если у вас возникают затруднения или вы еще не имеете опыта работы с коммуникационными программами, проконсультируйтесь с администратором вашей локальной сети.

Также как и в случае локального доступа, вам надо знать те же три атрибута для осуществления доступа: имя машины, ваше имя в системе, пароль.



Управление заданиями


Запуск задачи на выполнение может осуществляться в двух режимах:

синхронный режим - командный интерпретатор будет ждать завершения задачи. В синхронном режиме запускаются все интерактивные задачи (скажем, редактор текстов, man, и т.д.). Задачи не требующие диалога с пользователем можно запустить в фоновом режиме.

фоновый (асинхронный) режим - командный интерпретатор немедленно после запуска задачи выдает приглашение. Вы можете продолжать работать, а запущенная задача будет выполняться ``параллельно''. Как только фоновый процесс завершится, командный интерпретатор сообщит вам об этом.

По умолчанию все задачи запускаются в синхронном режиме. Для того, чтобы запустить задачу в фоновом режиме, поставьте амперсанд (&amp ) в конце командной строки.

Пример: следующая команда запускает задачу setka в синхронном режиме:

% setka data.txt

Ту же задачу можно послать на выполнение в фоновом режиме так:

% setka data.txt &amp

Не следует запускать расчетные задачи в фоновом режиме, так как большое количество таких задач может привести к перегрузке системы. Значительно лучше использовать систему пакетной обработки заданий CXbatch, которая имеет гибкие средства защиты от перегрузки.



Управляющие операторы и операторы цикла


Из списка встроенных команд оболочки мы сознательно исключили условные операторы и операторы цикла, которые будут рассмотрены здесь.



Управляющие структуры


Условное предложение:

if ( &lt условие&gt ) &lt предложение&gt

\hskip 1cm [else &lt предложение&gt ]

Предложения цикла:

while ( &lt условие&gt ) &lt предложение&gt

for (&lt выражение&gt ; &lt условие&gt ; &lt выражение&gt )

\hskip 1cm &lt предложение&gt

Например:

for(i=1; i&lt =NF; i++) - Аналогично циклу for в языке ``С''

for (i in array) - Цикл по элементам массива. Но, элементы массива доступны в этом случае в случайном порядке.

break - Немедленный выход из цикла.

continue - Переход к выполнению следующего предложения.

next - Немедленный переход к анализу следующей строки.

exit - Выход из программы (на конец input).

# - Комментарий



Условное выполнение


Синтаксис условного оператора if в C-shell таков

if (expr ) command

if (expr ) then

...

else

...

endif

В качестве expr может стоять либо арифметическое выражение, либо проверка атрибутов файла. Пример:

if ( $i&lt 10 ) echo $i

или

if ( -f /etc/hosts ) cat /etc/hosts

Рассмотрим последний случай подробнее. Возможны следующие проверки атрибутов файла:

-r доступен на чтение

-w доступен на запись

-x доступен на исполнение

-e проверка существования файла

-o проверка что вы являетесь хозяином данного файла

-z файл имеет нулевой размер

-f файл является обычным файлом

-p файл является именованным программным каналом

-d файл является директорией



Установка номера страницы


1. Установить номер страницы 27

.pn 27

2. Увеличить номер страницы на 2

.pn +2



Встроенные функции


length(arg) - Функция длины arg. Если arg не указан, то выдает длину текущей строки.

exp(),log(),sqrt() - Математические функции экспонента, логарифм и квадратный корень.

int() - Функция целой части числа.

substr(s,m,n) - Возвращает подстроку строки s, начиная с позиции m, всего n символов.

index(s,t) - Возвращает начальную позицию подстроки t в строке s. (Или 0, если t в s не содержится.)

sprintf(fmt,exp1,exp2,...) - Осуществляет форматированную печать (вывод) в строку, идентично PRINTF.

split(s,array,sep) - Помещает поля строки s в массив array и возвращает число заполненных элементов массива. Если указан sep, то при анализе строки он понимается как разделитель.



Встроенные команды и переменные


Список важнейших встроенных команд C-shell с краткими пояснениями:

alias определяет псевдоним

bg переводит задачу в фоновый режим исполнения

chdir path команда перехода в каталог path.

echo выводит на стандартный вывод все свои аргументы

exec filename запускает процесс из файла filename вместо текущей shell (т.е. поверх нее). Возврат в shell невозможен.

exit заканчивает работу shell.

fg переводит фоновый процесс в синхронный.

file filename выдает информацию о том, что операционная система думает об этом файле.

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

kill pid посылает сигнал аварийного завершения процессу с номером pid, что обычно приводит к уничтожению процесса.

source filename считывает и исполняет команды из файла filename.

set, setenv установка внутренних переменных и переменных окружения.

shift var сдвигает элементы массива var влево. При этом размер массива уменьшается на единицу, а нулевой элемент массива теряется. Переменная var должна быть массивом.

time command выполняет команду command и выводит на терминал затраченное на ее выполнение время.

unset уничтожает переменную shell.

unalias уничтожает ранее определенный псевдоним команды.

@ name=expr заносит результат арифметического выражения expr в переменную name.

Список важнейших встроенных переменных C-shell с краткими пояснениями:

argv массив параметров командной строки (используется в командном режиме)

cdpath каталог, куда shell переходит, получив команду chdir без аргумента.

history размер буфера для запоминания команд.

home домашний каталог пользователя

mail местоположение в файловой системе почтового ящика пользователя.

path путь поиска внешних команд.

prompt основное приглашение shell.

prompt1 вторичное приглашение.

shell полный путь исполняемого файла текущей оболочки (/bin/csh)



Ввод текста


В этом режиме все, что набирается на клавиатуре отображается на экране терминала и запоминается в буфере редактора.

Нет возможности осуществлять операции редактирования текста, за исключением стирания последнего набранного символа (с помощью комбинации клавиш &lt Control-H&gt ).



Выбор страниц


Напечатать только страницу 7:

% nroff -o7 text | lpr

Напечатать страницы 3, 9 и 18:

% nroff -o3,9,18 text | lpr

Напечатать страницы с 11-13 и 22:

% nroff -o11-13,22 text | lpr

Напечатать страницы с 1-5:

% nroff -o-5 text | lpr

Напечатать страницы от 14 до конца документа:

% nroff -o14- text | lpr



Выделение текста и отмена выделения


Если вы хотите выделить текст в разделе путем его подчеркивания, то вставьте команду

.I и .R

Пример:

.PP

Now we are coming to the Now we are coming

.I to the __most important_

most important item of the agenda.

.R

item of the agenda.

Лучшим способом отменить выделение текста в вашем документе является выход из него. Никакой команды форматирования не требуется.



Выход из системы


Чтобы завершить сеанс работы с компьютером, наберите команду

% logout

или

% exit.

Пожалуйста, не забывайте выходить из системы. Для этого есть по крайней мере две серьезных причины: первая - если вы ушли оставив ваш терминал подключенным к системе, любой человек может сесть за ваше место и ``поработать'' под вашим именем. Например стереть все ваши файлы, или посмотреть вашу почту и т.д.

Вторая причина заключается в том, что терминальное время (а не только процессорное время) подлежит учету и оплате. Не сделав logout вы рискуете получить неожиданно большой счет за услуги компьютерного центра.



Выражение отношения


Выражение отношение может быть двух типов:

&lt Выражение&gt &lt Принадлежность&gt &lt Выражение&gt

&lt Выражение&gt &lt Лог. Операция&gt &lt Выражение&gt

Принадлежность:

~ - Содержится;

!~ - Не содержится.

Лог. Операция: &lt , &lt =, ==, !=, &gt =, &gt .

Например:

$1 ~ /[Oo]lga/ - Указывает на строки, первое поле которых содержит Olga или olga.

$1 &gt = "s" - Указывает на строки, начинающиеся с символа s или следующих за ним по порядку: t, u, v...



Вывод иллюстраций


При помощи команд:

.DS и .DE

1. Стандартный вывод иллюстрации

Чтобы вывести иллюстрацию в виде текста т.е. сделать отступ и выровнять строки по левому краю вы можете воспользоваться командами .DS и .DE .

.PP

sssssssssssssssss sssssssssssss

ssssssssssssss ssssssssssssssssss

sssssssss sssssssss

.DS

ddddddddddddddddd ddddddddddddddddd

ddddddddddd ddddddddddddddddd

dddddddd dddd

.DE

2. Сблокированная иллюстрация

Команда: .DS B

Чтобы вывести текст с отступом и так, чтобы иллюстрация располагалась в центре экрана, добавьте к команде .DS опцию B :

.PP

sssssssssssssssssssss sssssssssssssssssssss

sssssssssssssssss ssssssssssssssssssssssssss

sssssss sssssssss

.DS B

dddddddddddddddd ddddddddddddddddd

dddddddddddd ddddddddddddddddd

ddddddddd ddddddddddddd

.DE

3. Центрированная иллюстрация

Команда: .DS C

Чтобы центрировать при выводе каждую строку текста добавьте опцию С к команде .DS .

.DS C

.

.текст

.

.DE



Вывод /Печать/


Формат оператора печати:

PRINT [&lt список выражений&gt ] [ &gt &lt выражение1&gt ]

Если в списке выражения находятся через запятую, то значения этих выражений выводятся на output (печатаются) через символ-разделитель OFS (по умолчанию пробел). Если же выражения стоят через пробел, то на печати происходит их конкатенация.

Значение &lt выражения1&gt рассматривается как имя файла. Само его присутствие означает печать в файл. Если вместо ``&gt '' стоит ``&gt &gt '', то это означает добавление к уже существующему файлу. Можно использовать в одной программе максимально до 10 output файлов.

Оператор форматированной печати:

PRINTF формат [,список выражений] [ &gt выражение1]

формат: символьная строка в двойных кавычках. Идентичен формату, используемому в функции printf в языке ``С''. Формат может содержать:

обычные символы, они копируются на output.

escпоследовательности, представляющие неграфические символы, например, "\n" - новая строка.

спецификации для вывода аргументов, они следуют после символа ``%''. Число спецификаций должно быть равно числу аргументов. (Если оно меньше числа аргументов, то лишние аргументы игнорируются, если же больше - то это ошибка)



WWWсервер


Гипертекстовый сервер компьютерного центра содержит много полезной информации о системе, в том числе ряд учебных пособий по работе в ConvexOS. Добро пожаловать на WWW-сервер центра:

URL http://www.csa.runnet.ru/CSA



Заголовки


Ненумерованные заголовки. Чтобы получить обыкновенный ненумерованный заголовок длиной менее одной строки, поставьте перед ним команду .SH , а за ним команду .LP или .PP , чтобы отменить начало следующего текста. Заголовок будет подчеркнут, выровнен по левому краю и отделен от обычного текста сверху и снизу пустыми строками.

Нумерованные заголовки. При использовании команды .NH оставить пробел справа команды и набрать число, указывающее уровень подчиненности (до 5 уровней). В заголовке 1-го уровня число можно опустить. Тогда средство MS приписывает следующий допустимый номер на любом данном уровне. Например:

.NH

The Main Thing 1. The Main Thing

.NH 2 1.1. Where to Start

Where to Start 1.2. When to start

.NH 2 1.2.1. The best Time

When to Start 1.2.2. The Worst Time

.NH 3 2. Other

The Best Time

.NH 3

The Worst Time

.NH

Other...

.LP



Значения переменных


Переменные могут интерпретироваться как числовые или строковые. Они принимают значения в зависимости от контекста, например:

x = 1, x воспринимается как число;

x = " ", x - строка;

x + "abc" - результат операции интерпретируется как число независимо от того, было ли х числом или строкой. Если строка не может быть интерпретирована как число ("abc"), то ее значение становится 0.

Строка может содержать максимально до 256 символов.