Версия для печати

Архив документации на OpenNet.ru / Раздел "Обработка текста" (Многостраничная версия)
Вперед Назад Содержание

Текстовые утилиты GNU



Описание утилит cat, tac, nl, od, fmt, pr, fold, head, tail, split, csplit wc, sum, cksum, md5sum, sort, uniq, comm, cut, paste, join, tr, expand, unexpand.

1. Введение

2. Общие Опции

3. Вывод файлов

4. Формирование содержимого файла

5. Частичный вывод файлов

6. Вычисление контрольных сумм файлов

7. Обработка и сортировка файов

8. Обработка полей в строке

9. Обработка символов

10. Создание библиотеки инструментальных программных средств


Вперед
Вперед Назад Содержание

Текстовые утилиты GNU



Описание утилит cat, tac, nl, od, fmt, pr, fold, head, tail, split, csplit wc, sum, cksum, md5sum, sort, uniq, comm, cut, paste, join, tr, expand, unexpand.

1. Введение

2. Общие Опции

3. Вывод файлов

4. Формирование содержимого файла

5. Частичный вывод файлов

6. Вычисление контрольных сумм файлов

7. Обработка и сортировка файов

8. Обработка полей в строке

9. Обработка символов

10. Создание библиотеки инструментальных программных средств


Вперед Назад Содержание
Вперед Назад Содержание

1. Введение

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

Текстовые утилиты в основном совместимы со стандартом POSIX.2.

Пожалуйста, сообщайте о найденных ошибках по адресу `bug-gnu-utils@prep.ai.mit.edu'. Не забудте указать номер версии, архитектуру машины, входные файлы и другую информацию, необходимую для генерации ошибки: то, что Вы вводили, что ожидали, что получили и почему. И, пожалуйста, опишите проблему как следует. Загляните в раздел Bugs GNU CC (Ошибки GNU Cи компилятора; здесь и далее прим. пер.).

Это руководство основано на man-страницах UNIX, написанных Дэвидом Мак-Кензи и усовершенствованных Джимом Мэйерингом. Описание утилиты 'fmt' написал Росс Патерсон. Фрэнкус Пинард сделал перевод в формат Texinfo. Карл Берри провел индексацию, некоторую реорганизацию и редактирование реультатов. Ричард Стэллмэн тоже сделал свой вклад в ход процесса.


Вперед Назад Содержание
Вперед Назад Содержание

2. Общие Опции

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

Некоторые утилиты мргут иметь несколько аргументов. В этих случаях `--help' и `--version' воспринимаются как опции, если имеется один и только один аргумент командной строки.

 `--help'     Выдаст список всех имеющихся опций и завершит работу.
 `--version'  Выведет номер версии и завершит работу.


Вперед Назад Содержание
Вперед Назад Содержание

3. Вывод файлов

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

3.1 cat: сцепка (конкатенация) и вывод файлов

Утилита `cat' последовательно считывает файлы, указанные в качестве аргументов FILE, и выводит их содержимое в стандартный вывод. Если имя файла не указано или в качестве одного из аргументов задан минус '-', `cat' считывает данные из стандартного ввода.

Общая запись:

      cat [OPTION] [FILE]...     
Утилита воспринимает следующие опции (см. так же главу 2 'Общие Опции'):
`-A' или `--show-all'

Эквивалентно `-vET'.

`-b' или `--number-nonblank'

Нумерует все непустые выходные строки, начиная с 1.

`-e'

Эквивалентно `-vE'.

`-E' или `--show-ends'

Выводит '$' вконце каждой строки.

`-n' или `--number'

Нумерует все выходные строки, начиная с 1.

`-s' или `--squeeze-blank'

Совмещает смежные пустые строки в одну пустую строку.

`-t'

Эквивалентно `-vT'.

`-T' или `--show-tabs'

Выводит символы табуляции как `^I'.

`-u'

Необходима для совместимости с UNIX.

`-v' или `--show-nonprinting'

Выводит котрольные символы, кроме LFD и TAB, ипользуя `^' и предстоящие символы, которые имеют старший бит устанавливаемый `M-'.

3.2 `tac': объединие и вывод файлов в обратном порядке

Утилита `tac' последовательно считывает файлы, указанные в качестве аргументов FILE, и выводит их содержимое в стандартный вывод, переставляя отдельные записи (по умолчанию строки). Если имя файла не указано, или в качестве одного из аргументов задан минус '-', `tac' считывает данные из стандартного ввода.

Общая запись:

      tac [OPTION]... [FILE]...     
Записи разделяются некоторым набором символов (по умолчанию символом перевода строки).

Утилита воспринимает следующие опции (см. так же главу 2 'Общие Опции'):

`-b' или `--before'

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

`-r' или `--regex'

Трактует набор символов разделителя как регулярное выражение.

`-s SEPARATOR' или `--separator=SEPARATOR'

Использует SEPARATOR как изображение разделителя, вместо символа перевода строки.

3.3 `nl': нумерация строк выводимых файлов

Утилита `nl' последовательно считывает файлы, указанные в качестве аргументов FILE, и выводит их в стандартный вывод, с приписанными к некоторым строкам номерами. Если имя файла не указано, или в качестве одного из аргументов задан минус '-', `nl' считывает данные из стандартного ввода.

Общая запись:

      nl [OPTION]... [FILE]...    
`nl' разделяет получаемые данные на логические страницы; по умолчанию, нумерация каждой страницы начинается с 1. `nl' воспринимает все входные файлы как единый блок и проводит разбиение независимо от расположения файлов.

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

Начала частей логических страниц выделяются во входном файле одной из следующих строк-разделителей:

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

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

Утилита воспринимает следующие опции (см. так же главу 2 'Общие Опции'):

`-b STYLE' или `--body-numbering=STYLE'

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

`a'

нумерует все строки,

`t'

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

`n'

не нумерует строки (по умолчанию определено для заголовка и хвоста),

`pREGEXP'

нумерует строки содержащие соответствие регулярному выражению REGEXP.

`-d CD' или `--section-delimiter=CD'

Определяет CD как изображение разделителя; по умолчанию `\:'. Если указано только C, то второй символ будет `:'. Не забудьте защитить символ `\' кавычками или добавочной обратной косой чертой от интерпретации его оболочкой.

`-f STYLE' или `--footer-numbering=STYLE'

Аналогично `--body-numbering'.

`-h STYLE' или `--header-numbering=STYLE'

Аналогично `--body-numbering'.

`-i NUMBER' или `--page-increment=NUMBER'

Увеличивает номера строк на NUMBER (по умолчанию на 1).

`-l NUMBER' или `--join-blank-lines=NUMBER'

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

`-n FORMAT'

`--number-format=FORMAT'

Выбирает FORMAT формат нумерации (по умолчанию `rn'):

`ln'

выравнивание слева, без предстоящего нуля;

`rn'

выравнивание справа, без предстоящего нуля;

`rz'

выравнивание справа, с предстоящим нулем;

`-p' или `--no-renumber'

Отменяет сбрасывание текущего номера строки в начале логической страницы.

`-s STRING' или `--number-separator=STRING'

Отделяет номер строки от текста набором символов STRING (по умолчанию TAB).

`-v NUMBER' или `--first-page=NUMBER'

Устанавливает исходный номер - NUMBER строки для каждой страницы (по умолчанию 1).

`-w NUMBER' или `--number-width=NUMBER'

Использует NUMBER символов для номера строки (по умолчанию 6).

3.4 `od': вывод файлов в восьмеричном и других форматах

Утилита `od' последовательно считывает файлы, указанные в качестве аргументов FILE, и выводит их в стандартный вывод в заданном формате. Если имя файла не указано, или в качестве одного из аргументов задан минус '-', `od' считывает данные из стандартного ввода.

Общая запись:

      od [OPTION]... [FILE]...     od -C [FILE] [[+]OFFSET [[+]LABEL]]
Каждая строка содержит выходное смещение и следующий за ним блок данных. По умолчанию смещение выводится в восьмеричном формате, а каждый блок данных, т.е. два входных байта, как единое восмеричное число.

Утилита воспринимает следующие опции (см. так же главу 2 'Общие Опции'):

`-A RADIX' или `--address-radix=RADIX'

Выбирает систему счисления - RADIX в которой выводится смещение. Система может быть одной из следующих:

`d'

десятичная;

`o'

восьмеричная;

`x'

шеснадцатиричная;

`n'

никакая (смещение не выводится).

По умолчанию восьмеричная.
`-j BYTES' или `--skip-bytes=BYTES'

Не обрабатывает первые BYTES входных байт. Если BYTES начинается с `0x' или с `0X', оно интерпретируется как шестнадцатиричное число; если с `0' то как восьмеричное; иначе, как десятичное. Приписывание `b' умножает BYTES на 512, `k' - на 1024, а `m' - на 1048576.

`-N BYTES' или `--read-bytes=BYTES'

Выводит не менее BYTES входных байт. Различные символы перед и после BYTES интерпретируются как в опции `-j'.

`-s [N]' или `--strings[=N]'

Выводит только "строковые константы", т.е. не меньше N (3 по умолчанию) последовательных графических символа ASCII, следующих за пустым (нулевым) байтом.

`-t TYPE' или `--format=TYPE'

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

`a'

именованный символ,

`c'

ASCII символ или символ с предстоящей обратной косой чертой,

`d'

десятичное со знаком,

`o'

восьмеричное,

`u'

десятичное без знака,

`x'

шестнадцатиричное.

Тип `a' выводит `sp' для обозначения пробела, `nl' для перевода строки, и `nul' для нулевого байта. Тип `c' выводит ` ', `\n', и `\0', соответственно.

Исключая типы `a' и `c', Вы можете задать количество байт необходимое для интерпретации любого числа в заданном типе данных, поставив нужное десятичное целое после индикатора типа. Или же Вы можете задать размер одного из втроенных в СС (Cи компилятор) типов данных, поставив после индикатора типа один из следующих символов. Для целых (`d', `o', `u', `x'):

`C'

char,

`S'

short,

`I'

int,

`L'

long.

Для чисел с плавающей точкой (`f'):
D

double,

L

long double.`-v' или `--output-duplicates'

Выводит тождественные последовательные строки. По умолчанию, из нескольких тождественных последовательных строк, `od' выводит только первую строку, а вместо каждой из остальных выводит строку содержащую только звездочку.
`-w[N]' или `--width[=N]'

Выводит N входных байт как выходную строку. Это должно быть число кратное наименьшему общему кратному размеров заданных типов вывода. Если N не указано, то по умолчанию 32. Если опция вообще не упоминается то 16. Следующие несколько опций относятся к старому, до-POSIX формату.

Но GNU утилита `od' воспринимает любые комбинации опций старого и нового стилей.

`-C' или `--traditional'

Позволяет узнавать до-POSIX аргументы (не опции!) которые `od' должен воспринимать по традиции.

Следующую запись:

           od --traditional [FILE] [[+]OFFSET[.][b] [[+]LABEL[.][b]]]
можно использовать для задания одного файла и необязательных аргументов, определяющих смещение - OFFSET и адрес псевдостарта - LABEL. Смещение - OFFSET интерпретируется как восьмеричное число, показывающее сколько входных байт нужно пропустить перед форматированием и выводом. Точка после смещения позволяет интерпретировать его как десятичное число. Если число не десятиное и начинается с `0x' или с `0X', оно интерпретируется как шестнадцатиричное; если с `0' то как восьмеричное. Приписывание `b' умножает OFFSET на 512, `k' - на 1024, а `m' - на 1048576. LABEL интерпретируется так же, но задает начальный псевдо-адресс. Псевдо-адресс изображается в скобках после обычного адреса.


Вперед Назад Содержание
Вперед Назад Содержание

4. Формирование содержимого файла

Эти команды перераспределяют содержимое файла.

4.1 `fmt': переформирование текста

Утилита `fmt' преобразует и сливает строки для получения выходных строк (не более) данной длины (75 символов по умолчанию).

Общая запись:

      fmt [OPTION]... [FILE]...
`fmt' последовательно считывает файлы, указанные в качестве аргументов FILE, и выводит их после обработки в стандартный вывод. Если имя файла не указано, или в качестве одного из аргументов задан минус '-', `od' считывает данные из стандартного ввода.

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

`fmt' предпочитает разрывать строку в конце предложения и пытается избежать разрыва после первого слова или перед последним словом предложения. Конец предложкния определяется либо как слово оканчивающееся на ".?!" с последующими двумя пробелами, либо как конец абзаца, либо как конец строки, игнорируя любые скобки и кавычки. Так же, как и TeX, `fmt' читает целый абзац перед тем как разбивать строки, а принцип разбиения такой же, как в книге "Разбиение абзаца на строки" (Дональд Кнут и Майкл Пласс, 'Breaking Paragraphs Into Lines', `Software--Practice and Experience', 11 (1981), 1119-1184).

Утилита воспринимает следующие опции (см. так же главу 2 'Общие Опции'):

`-c' или `--crown-margin'

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

`-t' или `--tagged-paragraph'

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

`-s' или `--split-only'

Только разбивает строки. Преобразует строки, которые были неправильно сформированны.

`-u' или `--uniform-spasing'

Преобразует пробелы между словами в один пробел, а пробелы между предложениями в два пробела.

`-WIDTH' или `-w WIDTH' или `--width=WIDTH'

Пытается нарастить выходную сроку до WIDTH символов (по умолчанию 75). Но сначала `fmt' составляет строку примерно на 7% короче, чтобы оставить место для баланса.

`-p PREFIX' или `--prefix=PREFIX'

Формируются только строки начинающиеся с PREFIX (возможно с пробела или с табуляции). Но строка обрабатывается без учета PREFIX. Это можно использовать для преобразования определенных видов программных комментариев, оставляя текст программы неизменным.

4.2 `pr': нумерация страниц и распределение файла в колонки для вывода на принтер

Утилита `pr' последовательно считывает файлы, указанные в качестве аргументов FILE, и выводит их виде (не обязательно) нескольких колонок в стандартный вывод, с пронумерованными страницами. Если имя файла не указано, или в качестве одного из аргументов задан минус '-', `pr' считывает данные из стандартного ввода.

Общая запись:

      pr [OPTION]... [FILE]...
По умолчанию, 5-ти строчный заголовок выводится так: две пустые строки; строка с датой, именем файла и номером страницы; и еще две пустых строки. Пять строк хвоста выводятся так же.

Утилита воспринимает следующие опции (см. так же главу 2 'Общие Опции'):

`+PAGE'

Начнает вывод со страницы PAGE.

`-COLUMN'

Выводит COLUMN колонок. Если Вы не используете опцию `-w' для увеличения ширины страницы, ширина колонок автоматически уменьшается при увеличении числа колонок.

`-a'

Выводит колонки поперек вместо того чтобы выводить их вдоль.

`-b'

Выравнивает колонки на последней странице.

`-c'

Выводит контрольные символы используя `^', а другие неграфические символы в восьмеричном предсавлении с предстоящей '\'. По умолчанию, неграфические символы не изменяются.

`-d'

Выводит двойные пробелы.`-e[IN-TABCHAR[IN-TABWIDTH]]' На входе преобразует табуляцию в пробелы. Необязательный аргумент IN-TABCHAR воспринимается как входной символ табуляции (по умолчанию ТАВ). Второй необязательный аргумент IN-TABWIDTH обозначает количество пробелов в этой табуляции (по умолчанию 8).

`-f' или `-F'

Использует символ перевода формата вместо символа перевода строки.

`-h HEADER'

Заменяет имя файла в заголовке на HEADER.`-i[OUT-TABCHAR[OUT-TABWIDTH]]' Заменяет пробелы на табуляцию на выходе. Необязательный аргумент OUT-TABCHAR воспринимается как выводимый символ табуляции (по умолчанию ТАВ). Второй необязательный аргумент OUT-TABCHAR обозначает количество пробелов в этой табуляции (по умолчанию 8).

`-l N'

Определяет длину страницы в N строк (по умолчанию 66). Если N меньше 10, заголовок и хвост опускаются, как при опции `-t'.

`-m'

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

`-n[NUMBER-SEPARATOR[DIGITS]]'

Ставит номер строки перед каждой колонкой, а при параллельном выводе (`-m'), перед каждой строкой. Необязательный аргумент NUMBER-SEPARATOR отделяет номер от текста (по умолчанию TAB). А необязательный аргумент DIGITS задает число цифр используемых для номера (по умолчанию 5).

`-o N'

Устанавливает общий (для каждой строки) отступ слева на N пробелов (по умолчанию 0).Тогда общая ширина страницы будет N плюс ширина устанавливаемая опцией `-w'.

`-r'

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

`-s[C]'

Разделяет колонки символом C. Если C опущено, то пробелом; если опущена опция вообще, то TAB.

`-t'

Подавляется вывод заголовока и хвоста. Опция `-f' при этом теряет свое значение.

`-v'

Выводит неграфические символы в восьмеричном представлении с предстоящей обратной косой черой.

`-w N'

Устанавливает ширину страницы в N (по умолчанию 72) символов.

4.3 `fold': разбивка длинных строк

Утилита `fold' последовательно считывает файлы, указанные в качестве аргументов FILE, и выводит их в стандартный вывод, разбивая длинные строки. Если имя файла не указано, или в качестве одного из аргументов задан минус '-', `fold' считывает данные из стандартного ввода.

Общая запись:

      fold [OPTION]... [FILE]...
По умолчанию, `fold' разбивает строки содержащие более 80 символов, при чем на столько строк на сколько необходимо.

`fold' подсчитывает число символов строки (TAB воспринимается как несколько пробелов), но символ "забой" уменьшает счетчик.

Утилита воспринимает следующие опции (см. так же главу '2 Общие Опции'):

`-b' или `--bytes'

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

`-s' или `--spaces'

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

`-w WIDTH' или `--width=WIDTH'

Устанавливает максимальную длину равной WIDTH, вместо 80.


Вперед Назад Содержание
Вперед Назад Содержание

5. Частичный вывод файлов

Эти утилиты выводят некоторую часть входных данных.

5.1 `head': вывод первой части файла

Утилита `head' последовательно считывает файлы, указанные в качестве аргументов FILE, и выводит первые десять строк каждого файла в стандартный вывод. Если имя файла не указано, или в качестве одного из аргументов задан минус '-', `head' считывает данные из стандартного ввода.

Общая запись:

      head [OPTION]... [FILE]...
      head -NUMBER [OPTION]... [FILE]...
Если задано более одного файла, `head' выводит однострочный заголовок вида:
      ==> Имя Файла <==
перед выводом информации.

`head' распознает два формата опций: новый, в котором числа являются аргументами опций (`-q -n 1'), и старый, в котором числа предшествуют символу опции (`-1q').

Утилита воспринимает следующие опции (см. так же главу 2 'Общие Опции'):

`-COUNT OPTIONS'

Эта опция распознается, только если она задана первой, т.о. OPTIONS обозначает другие опции. COUNT - это десятичное число с приписанным символом размера (`b', `k', `m', см. опцию `-c' или `l') или другим необязательным символом (`cqv'), определяющее емкость выводимых строк.

`-c BYTES' или `--bytes=BYTES'

Выводит первые BYTES байт, как начальную строку. Приписывание `b' умножает BYTES на 512, `k' - на 1024, а `m' - на 1048576.

`-n N' или `--lines=N'

Выводит первые N строк.

`-q' или `--quiet' или `--silent'

Не выводит имя файла.

`-v' или `--verbose'

Всегда выводит имя файла.

5.2 `tail': вывод заключительной части файла

Утилита `tail' последовательно считывает файлы, указанные в качестве аргументов FILE, и выводит последние десять строк каждого файла в стандартный вывод. Если имя файла не указано, или в качестве одного из аргументов задан минус '-', `tail' считывает данные из стандартного ввода.

Общая запись:

     tail [OPTION]... [FILE]...
     tail -NUMBER [OPTION]... [FILE]...
     tail +NUMBER [OPTION]... [FILE]...
Если задано более одного файла, `head' выводит однострочный заголовок вида:
      ==> Имя Файла <==
перед выводом информации.

GNU утилита `tail' может выводить любое количество данных (некоторые другие версии `tail' не могут). Но она не имеет опции `-r' (вывод в обратном порядке), т.к. изменене порядка не имеет ничего общего с прсмотром некоторой части файла. Хотя BSD утилита `tail' (она имеет опцию `-r') может выводить в обраном порядке файлы, которе помещаютя в ее буффер (обычно 32k). GNU утилита `tac' делает это гораздо гибче и надежней.

`tail' распознает два формата опций: новый, в котором числа являются аргументами опций (`-n 1'), и старый, в котором числа предшествуют символу опции (`-1' или `+1').

Если перед опцией имеется необязательный аргумент в виде числа N с плюсом `+' впереди, `tail' вывдит файл начиная с N-ой строки.

Утилита воспринимает следующие опции (см. так же главу 2 'Общие Опции'):

`-COUNT' или `+COUNT'

Эта опция распознается, только если она задана первой. COUNT - это десятичное число с приписанным символом размера (`b', `k', `m', см. опцию `-c' или `l') или другим необязательным символом (`cfqv'). Оно задает емкость выводимых строк.

`-c BYTES' или `--bytes=BYTES'

Выводит последние BYTES байт, как завершающую строку. Приписывание `b' умножает BYTES на 512, `k' - на 1024, а `m' - на 1048576.

`-f' или `--follow'

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

`-n N' или `--lines=N'

Выводит последие N строк.

`-q' или `-quiet' или `--silent'

Не выводит имя файла.

`-v' или `--verbose'

Всегда выводит имя файла.

5.3 `split': разбивка файла в блоки определенного размера

Утилита `split' создает входные файлы содержащие последовательные разбиения входа INPUT (или стандартного входа, если INPUT опущен или заменен на `-').

Общая запись:

      split [OPTION] [INPUT [PREFIX]]
По умолчанию, `split' выводит 1000 строк из INPUT (или остаток последнего разбиения), в каждый выходной файл.

Имена выходных файлов состоят из PREFIX (`x' по умолчанию) и приписанных к нему индикаторов `aa', `ab', и т.д. Об[единение выводимого упорядоченного списка файлов приведет к получению исходного файла. Если входных файлов больше 676, то `split' использует `zaa', `zab', и т.д.

Утилита воспринимает следующие опции (см. так же главу 2 'Общие Опции'):

`-LINES' или `-l LINES' или `--lines=LINES'

Составляет выходные файлы из LINES строк.

`-b BYTES' или `--bytes=BYTES'

Выводит BYTES байт из INPUT в каждый выходной файл. Приписывание `b' умножает BYTES на 512, `k' - на 1024, а `m' - на 1048576.

`-C BYTES' или `--line-bytes=BYTES'

Выводит в каждый выходной файл столько строк, сколько можно вывести без превышения BYTES байт. Если строка длинее чем BYTES байт, то `split' выводит BYTES байт из INPUT в каждый выходной файл, пока в строке не останется меньше BYTES байт, и тогда продолжаеся нормальный вывод.

5.4 `csplit': разбиение файла в блоки динамической длины

Утилита `csplit' создает несколько входных файлов содержащих последовательные разбиения входа INPUT (или стандартного входа, если INPUT опущен или заменен на `-').

Общая запись:

      csplit [OPTION]... INPUT PATTERN...
Содержимое выходных файлов определяется шаблоном PATTERN, что подробно описывается ниже. Если аргумент PATTERN ссылается на несущесвующую строку входного файла, то произойдет ошибка. После каждого нахождения соответствия шаблону, все оставшиеся входные данные копируются в отдельный выходной файл.

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

Существует несколько типов шаблонов:

`N'

Создает выходной файл содержащий первые N входных строк. При повторе создается еще один выходной файл содержащий следующие N входных строк. И так при каждом повторе.

`/REGEXP/[OFFSET]'

Создает выходной файл состоящий из строки входного файла, содержащей соответствие регулярному выражению REGEXP, и следующих за ней строк, вплоть до следующей такой строки. Аргумент OFFSET это целое число с `+' или `-' впереди. Если такой аргумент задан то создается выходной файл содержащий первые несколько входных строк вплоть до строки со смещением равным смещению строки, содержащей соответствие регулярному выражению REGEXP, плюс или минус OFFSET, и эта строка становится первой строкой следующего выходного блока.

`%REGEXP%[OFFSET]'

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

`{REPEAT-COUNT}'

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

Имена выходных файлов состоят, по умолчанию, из префикса `xx' и приписанных к нему суффиксов в виде двузначных десятичных чисел от `00' до `99'. Об[единение выводимого упорядоченного списка файлов приведет к получению исходного файла.

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

Утилита воспринимает следующие опции (см. так же главу 2 'Общие Опции'):

`-f PREFIX' или `--prefix=PREFIX'

Использует PREFIX как префикс имени выходного файла.

`-b SUFFIX' или `--suffix=SUFFIX'

Использует SUFFIX как суффикс имени выходного файла. Если эта опция задана, то строка суффикса должна содержать только `printf(3)'-стиль задания преобразований, возможно включая флаги установки формата, ширину поля, явные задания или все эти модификации вместе взятые. Буквенный формат должен преобразовывать двоичный целый аргумент в графическую форму, таким образом допускаются только `d', `i', `u', `o', `x', и `X' преобразования. Полный суффикс дается (вместе c текущим номером выводимого файла) в форме `sprintf(3)', которая используется для вывода суффикса каждого отдельно выводимого файла. При использовании этой опции игнорируется опция `--digits'.

`-n DIGITS' или `--digits=DIGITS'

Использует DIGITS знаков для вывода суффикса имени выходного файла, вместо двух по умолчанию.

`-k' или `--keep-files'

Не удаляет выходные файлы при ошибке.

`-z' или `--elide-empty-files'

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

`-s' или `-q' или `--silent' или `--quiet'

Не сообщает размеры выводимых файлов.


Вперед Назад Содержание
Вперед Назад Содержание

6. Вычисление контрольных сумм файлов

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

6.1 `wc': вывод числа строк, слов и символов содержащиеся в файле

Утилита `wc' подсчитывает и выводит число символов, слов, и строк файлов, указанных в качестве аргументов FILE. Если имя файла не указано, или в качестве одного из аргументов задан минус '-', `wc' считывает данные из стандартного ввода.

Общая запись:

      wc [OPTION]... [FILE]...
`wc' выводит одну строку со счетчиками для каждого файла. И если в качестве аргумента задан файл, то имя файла выводится перед счетчиками. Если задано больше одного файла, `wc' выводит заключительную строку с именем `total' и суммарными счетчиками всех файлов. Счетчики выводятся в следующем порядке: строки, слова, символы.

По умолчанию, `wc' выводит все три счетчика. Можно задать вывод конкретных счетчиков. Опции не анулируют предыдущие опции, т.ч. wc --bytes --words выведет счетчики символов и слов.

Утилита воспринимает следующие опции (см. так же главу 2 'Общие Опции'):

`-c' или `--bytes' или `--chars'

Выведет количество символов.

`-w' или `--words'

Выведет количество слов.

`-l' или `--lines'

Выведет количество строк.

6.2 `sum': вывод контрольной суммы и числа блоков

Утилита `sum' вычисляет 16-ти битовую контрольную сумму каждого файла, указанного в качестве аргумента FILE. Если имя файла не указано, или в качестве одного из аргументов задан минус '-', `sum' считывает данные из стандартного ввода.

Общая запись:

      sum [OPTION]... [FILE]...
`sum' выводит контрольную сумму и число блоков (округленное сверху) для каждого файла. По умолчанию, если задано больше одного файла, то имя файла тоже выводится.

По умолчанию, GNU утилита `sum' использует алгоритм вычисления контрольной суммы схожий с BSD утилитой `sum' и выводит размер файла в 1024-байтовых блоках.

Утилита воспринимает следующие опции (см. так же главу 2 'Общие Опции'):

`-r'

Эта опция необходима для совместимости с System V утилитой `sum'. Данная опция не оказывает влияния без указания опции `-s'.

`-s' или `--sysv'

Использует алгоритм вычисления контрольной суммы System V утилиты sum', и выдает размер файла в 512-байтовых блоках. Основная задача `sum' обеспечивать совметимость, а вот утилита

`cksum'

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

6.3 `cksum': вывод CRC контрольной суммы и подсчет символов

Утилита `cksum' высчитывает усложненную циклическую (CRC) контрольную сумму каждого файла, указанного в качестве аргумента FILE. Если имя файла не указано, или в качестве одного из аргументов задан минус '-', `cksum' считывает данные из стандартного ввода.

Общая запись:.

      cksum [OPTION]... [FILE]...
Утилита `cksum' выводит CRC контрольную сумму и число символов каждого файла. По умолчанию, если задан хотя бы один файл, то имя файла тоже выводится.

`cksum' обычно используется для проверки правильности перенесенного необычным способом файла (например 'netnews'), путем сравнения контрольной суммы полученного файла и исходной контрольной суммы, которая прилагается к файлу.

CRC-алгоритм задан в стандарте POSIX.2. Он не совместим с алгоритмом BSD или System V утилиты `sum' (см. предыдущий раздел), но он гораздо надежнее.

Опций всего две: `--help' и `--version' (см. главу 2 'Общие Опции').

6.4 `md5sum': вывод или проверка контрольной строки

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

Общая запись:

      md5sum [OPTION]... [FILE]...     
      md5sum [OPTION]... --check [FILE]
      md5sum [OPTION]... --string=STRING ...
Утилита `md5sum' выводит для каждого файла контрольную MD5 сумму, флаг показывающий, что входной файл двоичный или текстовый, и имя файла.

Утилита воспринимает следующие опции (см. так же главу 2 'Общие Опции'):

`-b' или `--binary'

Принимает все входные файлы, как бинарные. Эта опция не действенна в UNIX системах, т.к. они не различают двоичные и текстовые файлы. Она используется в системах с различным внутренним и внешним представлениями символов.

`-c' или `--check'

Читает данные и котрольную строку из FILE (если FILE не определен, то из стандартного ввода) и сообщает подходит ли эта строка соответствующему файлу. Каждая контрольная строка состоит из контрольной MD5 суммы, двоично/текстового флага и имени файла. Двоичные файлы отмечаются символом `*', текстовые - ` '. Для каждой такой строки, `md5sum' читает названный файл и считает для него контрольную MD5 сумму. Если вычисленная контрольная сумма не совпадает с входной контрольной суммой, то файл отмечается, как не прошедьший проверку. Иначе, файл выдерживает проверку и, по умолчанию, для каждой контрольной строки, выводится строка показывающая, что файл прошел проверку. Опция `--status' используется для отмены вывода этой строки. Если один из заданных файлов не удается открыть, если одна из контрольных строк содержит контрольную MD5 сумму не подходящую соответствующему файлу, или если какой-нибудь контрольной строки вообще нет, то утилита будет иметь ненулевой выходной статус.

`--status'

Ничего не выводит при проверке контрольных сумм.

`--string=STRING'

Вычисляет контрольную MD5 сумму для STRING, как для файла. Результат такой же, как для файла, содержащего только строку STRING.

`-t' или `--text'

Трактует все входные файлы, как текстовые.

`-w' или `--warn'

При проверке контрольных сумм, выводится сообщение о неправильно сформированных контрольных строках, если они есть.


Вперед Назад Содержание
Вперед Назад Содержание

7. Обработка и сортировка файов

Эти утилиты производят и обрабатывают сортированные файлы.

7.1 `sort': сортировка текстовых файлов

Утилита `sort' сортирует, объединяет и сравнивает все строки файла, указанного в качестве аргумента FILE. Если имя файла не указано, или в качестве одного из аргументов задан минус '-', то, по умолчанию `sort' считывает данные из стандартного ввода.

Общая запись:

      sort [OPTION]... [FILE]...
Утилита `sort' имеет три операционных режима: сортировка (по умолчанию), слияние, и проверка или сравнение. Следующие опции изменяют операционный режим:
`-c'

Проверяет отсортированны ли указанные файлы и, если они не отсортированны, выводит сообщение об ошибке и завершает работу со статусом 1.

`-m'

Сливает указанные файлы сортируя их, как единый блок. Каждый входной файл должен быть уже отсортирован. По умолчанию, 'sort' сортирует все указанные файлы.

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

Если даны какие-нибудь глобальные опции `Mbdfinr', но не заданны опции сортировки полей, `sort' сравнивает целые строки согласно глобальным опциям.

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

GNU утилита `sort' (как и все GNU утилиты) не имеет ограничений на длину входной строки. К тому же, если последний символ файла не символ перевода стрки, то `sort' просто приписывает его (символ перевода стрки) к файлу.

Если переменная оболочки `TMPDIR' установленна, то `sort' использует ее, как каталог для временных файлов, вместо `/tmp'. Опция `-T TEMPDIR', в свою очередь, изменяет эту переменную оболочки.

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

`-b'

Игнорирует отступ слева при сортировке строк.

`-d'

При сортировке игнорируются все символы кроме букв, цифр и пробелов.

`-f'

При сортировке не различает символы верхнего и нижнего регистров, например, `b' и `B' не различаются.

`-i'

Обрабатывает только графические символы ASCII (восьмеричный код 040-0176).

`-M'

Строки, состоящие из нескольких начальных пробелов и трехбуквенной аббревиатуры названия месяца сортируются в порядке: `JAN' < `FEB' < ... < `DEC' (символы каждой аббревиатуры заменяются на соответствующие символы верхнего регистра). Неправильные названия (если они есть) сортируются после правильных.

`-n'

Числовая сортировка, т.е. сортировка по числу в каждой строке. Oно может включать в себя несколько предстоящих пробелов, знак `-', несколько цифр и еще нсколько цифр, следующих за десятичной точкой.

`-r'

Меняет порядок на обратный.

Другие опции:
`-o OUTPUT-FILE'

Выводит данные в файл OUTPUT-FILE вместо стандартного вывода. Если OUTPUT-FILE является одним из входных файлов, `sort' перед сортировкой копирует его во временный файл, и выводит данные в OUTPUT-FILE.

`-t SEPARATOR'

Использует символ SEPARATOR как разделитель полей. По умолчанию, поля разделяются несколькими пробелами. Т.е. если дана входная строка ` foo bar', `sort' разобьет ее на поля ` foo' и ` bar'. Но разделитель полей не является частью ни предыдущего, ни следующего поля.

`-u'

В обычном режиме или в режиме `-m', выводит только первую из нескольких равных строк. А в режиме `-c' проверяет чтобы не было последовательных равных строк.

`-k POS1[,POS2]'

Опция, рекомендованная POSIX, для определения полей. Поле состоит из символов строки от POS1-го до POS2-го, включительно (или до конца строки, если POS2 опущено). Позиции символов и полей нумеруются начиная с единицы. См. ниже.

`+POS1[-POS2]'

Традиционная опция определения полей. Поле состоит из символов строки от POS1-го до, но не включая, POS2-го (или до конца строки, если POS2 опущено). Позиции символов и полей нумеруются начиная с 0. См. ниже.

GNU утилита `sort' воспринимает еще две опции: `--help' и `--version' (см. главу 2 'Общие Опции').

Старые (BSD и System V) реализации утилиты `sort' отличаются реализацией некоторых опций, особенно `-b', `-f', и `-n'. GNU утилита 'sort' ориентируется на стандарт POSIX, который, в свою очередь, cхож (но не полностью!) со стандартом System V. Согласно POSIX, опция `-n' теперь не подразумевает автоматического включеня опции `-b'. Для согласованности, опция `-M' была изменена. В некоторых случаях это может изменить смысл позиции символа в задании поля. Единственный способ решить эту проблему указать опцию `-b'.

Позиции в полях сортировки задаваемые опцией `-k' или `+' имеют вид `F.C', где F - это номер используемого поля, а C - номер символа считая с начала этого поля или с конца предыдущего поля. Если `.C' опущено, то рассматривается первый символ (не пробел) поля. Если задана опция `-b', отсчет `.C' начинается с первого непустого символа поля (для `+POS') или с первого непустого символа следующего за предыдущим полем (для `-POS').

К опциям сортировки полей могут быть приписаны символы глобальных опций `Mbdfinr', в этом случае данные символы используются в качестве модификаторов (для указания типа сортировки конкретных полей строки). Опцию `-b' можно независимо приписать к одной или обоим `+POS' и `-POS' частям определения поля, а как глобальная опция она действует сразу на обе. Действие опций сортировки может распространяться на конкретные поля строки. См. ниже.

Далее представлены несколько иллюстраций различных комбинаций опций. POSIX опция `-k' используется вместо устаревший записи `+POS1-POS2'. Обратная числовая сортировка:

           sort -nr
Сортировка по алфавиту, не учитывая первое и второе поле. Для этого используется опция сортировки, показывающая, что сравниваемая часть начинается с начального символа третьего поля и продолжается до конца строки:
           sort -k3
Числовая сортировка по второму полю и дополнительная алфавитная сортировка по третьему и четвертому символам пятого поля. Символ `:' исполльзуется для разделения полей:
           sort -t : -k 2,2n -k 5.3,5.4
Отметьте, что если Вы напишете `-k 2' вместо `-k 2,2', `sort' будет использовать для числовой сортировки все символы с начала второго поля и до конца строки. Так же отметьте, что модификатор `n' приписан к индикатору конечного поля. Все модификаторы воспринимаются независимо от того приписан ли символ модификатора к индикатору начального поля и/или к индикатору конечного поля. Т.е. наша запись элвивалентна `-k 2n,2' и `-k 2n,2n'.

Сортировка файла паролей по пятому полю игнорируя любые предстоящие пробелы. Строки с равными пятыми полями сортируются по номерам пользовательских ID в третьем поле: Альтернативно можно использовать глобальную опцию `-n':

           sort -t : -n -k 5b,5 -k 3,3 /etc/passwd
Если приписать `b' еще и к индикатору конечного поля, то будут игнорироваться и завершающие пробелы:
           sort -t : -n -k 5b,5b -k 3,3 /etc/passwd
Для этого можно использовать и глобальную опцию `-b' вместо `-n' указав модификатор `n' во второй опции сортировки полей:
           sort -t : -b -k 5,5 -k 3,3n /etc/passwd

7.2 `uniq': унификация файлов

Утилита `uniq' выводит "уникальные" строки взятые из входа INPUT (или стандартного входа, если INPUT опущен или заменен на `-').

Общая запись:

      uniq [OPTION]... [INPUT [OUTPUT]]
По умолчанию, `uniq' выводит "уникальные" строки в сортированный файл, т.е., из последовательных тождественных строк выводит только одну. Но, если нужно, она может наоборот отбрасывать строки представленные в единственном числе или выводть строки имеющиеся только в единственном экземпляре.

Входные данные должны быть уже отсортированны. Если данные не отсортированны, то Вам необходимо использовать `sort -u'.

Если файл OUTPUT не определен, то `uniq' выводит данные в стандартный вывод.

Утилита воспринимает следующие опции (см. так же главу 2 'Общие Опции'):

`-N' или `-f N' или `--skip-fields=N'

Пропускает N полей в строке перед сравнением. Полями называются последовательности символов, не содержащие табуляции и пробелов, которые отделяются друг от друга пробелами или табуляциями.

`+N' или `-s N' или `--skip-chars=N'

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

`-c' или `--count'

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

`-d' или `--repeated'

Вывод только повторяющиехся строк.

`-u' или `--unique'

Вывод только неповторяющихся строк.

`-w N' или `--check-chars=N'

Сравнивает первые N символов каждой строки (после пропуска заданного количества символов и/или полей).

7.3 `comm': построчное сравнивание двух файлов

Утилита `comm' выводит строки, которые являются общими для двух входных файлов и неповторяющиеся строки, представленные только в одном файле. Если имеется имя файла `-', то подразумевается стандартный вывод.

Общая запись:

      comm [OPTION]... FILE1 FILE2
Входные файлы должны быть отсортированны перед использованием `comm'.

Если опции не заданны, `comm' производит вывод в три колонки. Первая колонка содержит неповторяющиеся строки, представленные только в файле FILE1, вторая - неповторяющиеся строки, представленные только в файле FILE2, а третья - общие строки этих файлов.

Опции `-1', `-2', и `-3' подавляют вывод соответствующих колонок (см. так же главу 2 'Общие Опции').


Вперед Назад Содержание
Вперед Назад Содержание

8. Обработка полей в строке

8.1 `cut': вывод определенных частей строки

Утилита `cut' выводит в стандартный вывод выбранные части каждой строки кадого файла. Если имя файла не указано, или в качестве одного из аргументов задан минус '-', то, по умолчанию `cut' считывает данные из стандартного ввода.

Общая запись:

      cut [OPTION]... [FILE]...
В следующих пояснениях, BYTE-LIST, CHARACTER-LIST, и FIELD-LIST это одно или более чисел или промежутков (два числа через тире) разделенные запятыми. Байты, символы и поля нумеруются начиная с 1. Могут встречаться незакрытые промежутки: `-M' означает `1-M'; `N-' значит от `N' и до конца строки или последнего поля.

Утилита воспринимает следующие опции (см. так же главу 2 'Общие Опции'):

`-b BYTE-LIST' или `--bytes=BYTE-LIST'

Выводит только байты перечисленные в BYTE-LIST. Симвлы TAB и 'забой' считаются каждый за один байт.

`-c CHARACTER-LIST' или `--characters=CHARACTER-LIST'

Выводит только символы позиции которых перечисленны в CHARACTER-LIST. Ранее эта опция означала то же, что и `-b', из-за интернационализации все изменилось. Симвлы TAB и 'забой' воспринимаются каждый как один символ.

`-d DELIM' или `--delimiter=DELIM'

Для `-f', поля разделяются первым символом в DELIM (по умолчанию TAB).

`-n'

Не отбрасывает многобайтовые символы (эта опция пока не реализованна).

`-s' или `--only-delimited'

Для `-f', не выводит строки не содержащие разделители полей.

8.2 `paste': слияние строк файлов

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

Общая запись:

      paste [OPTION]... [FILE]...
Утилита воспринимает следующие опции (см. так же главу 2 'Общие Опции'):
`-s' или `--serial'

Склеивает строки одного файла вместо того, чотбы склеивать строки разных файлов.

`-d DELIM-LIST' или `--delimiters DELIM-LIST'

Последовательно использует символы из DELIM-LIST вместо TAB для разделения сливаемых строк. Когда DELIM-LIST исчерпается, он используется снова начиная с первого символа.

8.3 `join': сцепка строк, имеющих общее поле

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

Общая запись:

      join [OPTION]... FILE1 FILE2
FILE1 и FILE2 должны быть уже отсортированны в порядке возрастания (не числовом) по полям сравнения, если не задана опция `-t', они должны быть отсортированны без учета пробелов в конце строки, как в `sort -b'.

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

Утилита воспринимает следующие опции (см. так же главу 2 'Общие Опции'):

`-a FILE-NUMBER'

Выводит строку для каждой непарной строки из файла номер FILE-NUMBER (либо `1' либо `2'), дополнительно к нормальному выводу.

`-e STRING'

Заменяет пустые выходные поля на STRING.

`-1 FIELD' или `-j1 FIELD'

Сравнение по полю FIELD (положительное целое) первого файла.

`-2 FIELD' или `-j2 FIELD'

Сравнение по полю FIELD (положительное целое) второго файла.

`-j FIELD'

Эквивалентно `-1 FIELD -2 FIELD'.

`-o FIELD-LIST...'

Составляет каждую выходную строку согласно формату FIELD-LIST. Каждый элемент FIELD-LIST состоит из номера файла (либо 1 либо 2), точки, и номера поля (положительное целое). Элементы списка разделяются запятыми или пробелами. Все списки заданные в опциях `-o' объединяются вместе.

`-t CHAR'

Символ CHAR используется как входной и выходной разделитель полей.

`-v FILE-NUMBER'

Выводит строку для каждой непарной строки из файла номер FILE-NUMBER (либо `1' либо `2'), вместо нормального вывода.

GNU утилита `join' воспринимает так же опции `--help' и `--version' (см. главу 2 'Общие Опции').


Вперед Назад Содержание
Вперед Назад Содержание

9. Обработка символов

Эти утилиты оперируют отдельными символами.

9.1 `tr': преобразование, сжатие, и/или удаление символов

Общая запись:

      tr [OPTION]... SET1 [SET2]
Утилита `tr' сопирует стандартный ввод в стандартный вывод, выввполняя одну из следующих операций: Аргументы SET1 и (если указан) SET2 задают упорядоченные множества символов. Эти множества содержат символы, которыми оперирует `tr'. Опция `--complement' (`-c') заменяет SET1 на его дополнение (все символы не содержащиеся в SET1).

9.2 Задание множества симвлов

Формат аргументов SET1 и SET2 напоминает формат регулярного выражения, однако, это не регулярные выражения, а просто списки символов. Символы можно задать просто перечисляя их, но, для удобства можно использовать сокращения,описанные ниже. Некоторые из них можно использовать только в SET1 или SET2, как указанно далее.

Запись с предстоящей '\'.

Запись в виде '\' с последующим символом не указанным ниже является ошибочной.

Промежутки.

Запись `M-N' обозначает все символоы от M до N, в порядке возрастания. При чем M при упорядочивании должно стоять перед N; иначе, произойжет ошибка. Например, `0-9' то же самое, что и `0123456789'. Хотя GNU утилита `tr' не поддерживает синтаксис System V, в котором запись промежутков заключаются в квадратные скобки. Преобразования символов заданные в этом формате успешно выполняются, только если квадратным скобкам в SET1 соответствуют квадратные скобки в SET2.

Повторение символов.

Запись `[C*N]' в SET2 обозначает N повторений символа C. T.е., `[y*6]' то же самое, что `yyyyyy'. А запись `[C*]' в SET2 обозначает столько копий символа C, сколько необходимо чтобы сделать SET2 такой же длины как SET1. Если N начинается с `0', оно интерпретируется в восьмеричной, иначе в десятичной системе.

Классы символов.

Запись `[:CLASS:]' обозначает все символы из (предопределенного) класса CLASS. Символы рассматриваются в нестрогом порядке, кроме классов `upper' и `lower', которые рассматриваются в порядке возрастания. Если заданы две опции `--delete' (`-d') и `--squeeze-repeats' (`-s'), то в SET2 можно задать любой класс символов. Иначе, в SET2 можно указывать только классы 'lower' и `upper', и только, если соответстиующий класс (`upper' или `lower', соответственно) задан в той же относительной позиции в SET1. Названия классов приводятся ниже. Если название класса задано неправильно, то произойдет ошибка.

нестрогом порядке. Классы эквивалентности были введены относительно недавно для поддержки не-английских алфавитов. Но, похоже, не существует стандартного способа их задания. По этому, эти классы не полностью реализованны в GNU утилите `tr'; каджый класс эквивалентности состоит только из неособенных символов.

Преобразования

Утилита `tr' производит преобразование символов только если заданны SET1 и SET2, и не указана опция `--delete' (`-d'). `tr' преобразует каждый входной символ представленный в SET1 в соответствующий символ из SET2. Символы не представленные в SET1 не изменяются. Если символ представлен в SET1 больше одного раза, а соответствующие символы из SET2 не идентичны, используется только последний. например следующие две команды эквивалентны:

      tr aaa xyz
      tr a z
Чаще всего `tr' используется для преобразования символов нижнего регистра в символы верхнего регистра. Это можно сделать несколькими способами. Вот три примера:
      tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
      tr a-z A-Z
      tr '[:lower:]' '[:upper:]'
При преобразовании символов, SET1 и SET2 обычно имеют одинаковую длину. Если SET1 короче чем SET2, лишние символы из SET2 игнорируются.

С другой стороны, если SET1 длиннее чем SET2, то согласно POSIX.2 результат не определен. В этой ситуации, BSD утилита `tr' наращивает SET2 до дилны SET1 повторением последнего символа из SET2. System V утилита `tr' урезает SET1 до длины SET2.

По умолчанию, GNU утилита `tr' обрабатывает этот случай так же как BSD утилита `tr'. Если задана опция `--truncate-set1' (`-t'), GNU утилита `tr' обрабатывает этот случай так же как System V утилита `tr'. Эта опция игнорируется при выполнении других операций.

Например, эффективная для BSD запись бесполезна для System V утилиты `tr':

      tr -cs A-Za-z0-9 '\012'
потому что она преобразует только нулевые байты (первый элемент дополнения множества SET1), вместо всех букв и цифр, в символы перевода строки.

Сжатие повторений и удаление

Если задана только опция `--delete' (`-d'), `tr' удаляет все входные символы встречающиеся в списке SET1.

Если задана только опция `--squeeze-repeats' (`-s'), `tr' заменяет последовательность одинаковых символов на один такой символ, если он указан в списке SET1.

Если заданы обе опции `--delete' и `--squeeze-repeats', `tr' сначала производит удаление используя SET1, и потом сжимает последовательности повторяющихся символов используя SET2.

Опцию `--squeeze-repeats' так же можно использовать, при преобразовании символов, для сжатия оставшихся повторяющихся символов испльзуя SET2.

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

Удаление всех нулевых байт:

           tr -d '\000'

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

           tr -cs '[a-zA-Z0-9]' '[\n*]'
Преобразование последовательностей повторяющихся символов перевода сроки в одиночные символы:
           tr -s '\n'

Предупреждающие сообщения

Установка shell-переменной `POSIXLY_CORRECT' отключает вывод предупреждающих сообщений, для точного соответствия стандарту POSIX.2. Иначе, они выводятся в следующих случаях:

9.3 `expand': преобразование табуляции в пробелы

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

Общая запись:

      expand [OPTION]... [FILE]...
По умолчанию, `expand' преборазует все табуляции в пробелы. Она сохраняет символы 'забой' для вывода, эти символы уменьшают счетчик используемый для вычисления табуляций. Табуляция, по умолчанию, занимет 8 позиций.

Утилита воспринимает следующие опции (см. так же главу 2 'Общие Опции'):

`-TAB1[,TAB2]...' или `-t TAB1[,TAB2]...' или `--tabs=TAB1[,TAB2]...'

Если задано только TAB1, то позиции табуляции разделяются TAB1 пробелами (по умолчанию 8). Иначе, табуляции устанавливаются в позициях TAB1, TAB2, ... (пронумерованных начиная с 0), и каждая табуляция стоящая после заданной последней позиции табуляции заменяется на один пробел. Если позиции табуляции заданны в опциях `-t' и `--tabs', их можно записывать как через запятую, так и через пробел.

`-i' или `--initial'

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

9.4 `unexpand': преобразует пробелы в табуляции

Утилита `unexpand' последовательно считывает файлы, указанные в качестве аргументов FILE, и выводит их содержимое в стандартный вывод, заменяя последовательные табуляции и пробелы на табуляции. Если имя файла не указано, или в качестве одного из аргументов задан минус '-', `unexpand' считывает данные из стандартного ввода.

Общая запись:

      unexpand [OPTION]... [FILE]...
По уолчаню, `unexpand' преобразует только начальные пробелы и табуляции (перед котрыми нет других пробелов и табуляций) каждой строки. Она сохраняет символы 'забой' для вывода, эти символы уменьшают счетчик используемый для вычисления табуляций. Табуляция, по умолчанию, занимет 8 позиций.

Утилита воспринимает следующие опции (см. так же главу 2 'Общие Опции'):

`-TAB1[,TAB2]...' или `-t TAB1[,TAB2]...' или `--tabs=TAB1[,TAB2]...'

Если задано только TAB1, то позиции табуляции разделяются TAB1 пробелами, вместо 8 по умолчанию. Иначе, табуляции устанавливаются в позициях TAB1, TAB2, ... (пронумерованных начиная с 0), и все табуляции и лробелы стоящие после заданной последней позиции табуляции не изменяются. Если позиции табуляции заданны в опциях `-t' и `--tabs', их можно записывать через пробел. Эта опция автоматически подразумевает опцию `-a'.

`-a' или `--all'

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


Вперед Назад Содержание
Назад Содержание

10. Создание библиотеки инструментальных программных средств

Эта глава взята из `Linux Journal', том 1, номер 2, из статьи Арнольда Робинсона 'Что такое GNU?'.

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

В этой статье рассматривается проект GNU. Мы опишем ряд инструментальных средств GNU для Вашей системы Linux, и расскажем, как их можно использовать. Действительно, развивается ли философия "Инструментальных программных средств" ?

Философия инструментальных программных средств является важнейшей концепцией для реализации и развития UNIX (аналогами которой являются Linux и GNU). Современная пресса по работе в Интернет и мелькающими графическими пользовательскими интерфейсами обходит этот вопрос стороной. Это очень плохо, т.к. эта философия предоставляет мощнейшие ментальные модели для решения многих задач.

Многие люди носят в кармане шведский (складной) нож с несколькими лезвиями (как бы аналог библиотеки утилит). Он очень удобен для мелких повседневных нужд: для каждой проблемы в нем найдется лезвие (главное лезвие называется "миротворец").

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

Система UNIX разрабатывалась в Bell Labs профессиональными программистами и учеными-компьютерщиками. Они установили, что универсальные программы

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

Более того, они поняли, что реализация сцепки программ даст гораздо больше, чем создание универсальных программ. Гораздо проще решить задачу, комбинируя одноцелевые программы, чем писать для этого отдельную программу. Далее мы увидим несколько (классических) примеров одноцелевых программ.

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

Предполагается, что Вы знакомы с основными переопределениями ввода-вывода в интерпретаторе shell, особенно с понятием "стандартного ввода", "стандартного вывода" и "стандартной ошибки". Короче, "стандартный ввод" - это источник данных. Программе должно быть безразлично, откуда поступают данные, будь то файл, клавиатура, магнитофон или перфокарта. Аналогично, "стандартный вывод" - это приемник данных, и программа не должна заботиться, чем он может быть. Программа, которая просто читает из стандартного ввода, обрабатывает получаемые данные и выводит их, называется "фильтром". По аналогии с фильтрами в водопроводе.

C помощью shell-интерпретатора UNIX, можно легко управлять потоком данных:

   program_to_create_data | filter1 | .... | filterN > final.pretty.data
Эта строка начинается с программы, генерирующей данные. Далее поток данных проходит через программы-фильтры до конца командного канала (цепочки команд).

Да, стандартный ввод и стандартный вывод это замечательно. Но откуда же берется стандартная ошибка? Рассмотрим фильтр `filter1' в нашем командном канале. Что происходит, если при обработке данных происходит ошибка? Если выводить сообщение об ошибке в стандартный вывод, то оно попадет в стандартный ввод фильтра `filter2', и пользователь может не узнать о нем. Т.е. программам необходимо место, куда можно послать сообщение об ошибке, и где пользователь может его заметить. Это и есть стандартная ошибка, и она выводится на экран, даже если Вы переопределите стандартный вывод не на монитор.

Для взаимодействия фильтров, необходимо заранее согласовать формат данных. Самый прямолинейный и легкий путь, использовать простые текстовые строки. В UNIX файлы данных это просто набор байтов, в строках разделенных ASCII символом перевода строки ("newline" или, если Вы программируете на Си то `'\n''). Это традиционный формат для всех программ-фильтров. (Большинство ранних операционных систем использовали программы обработки двоичных данных. UNIX уже отошол от этого, подразумевая, что гораздо удобнее просматривать и редактировать данные в текстовом редакторе.)

Теперь, можно приступать к делу. Ниже мы рассмотрим некоторые инструментальные программы, и увидим как обеспечить их взаимодействие. При этом, будут упомянуты только те опции командной строки, которые нас интересуют. Для полного понимания Вы должны трижды (!) прочитать Вашу системную документацию, и так Вы должны делать всегда! Команда `who' `who' выдает текущий список ползователей вошедьших в систему. Предположим, что в систему вошло несколько пользователей:

     $ who
     arnold   console Jan 22 19:57
     miriam   ttyp0   Jan 23 14:19(:0.0)
     bill     ttyp1   Jan 21 09:32(:0.0)
     arnold   ttyp2   Jan 23 20:48(:0.0)
Здесь `$' - это обычное приглашение оболочки. В систему вошло 3 пользователя, причем один из них вошел дважды. Имя пользователя не может содержать больше восьми символов. `who' выдает информацию довольно удобно, но при таком способе выводятся не все данные.

Команда `cut'

Следующая рассматриваемая команда - команда `cut'. Она выделяет определенные поля входных данных. Например, мы можем осуществить вывод только системного имени и полного имени из файла `/etc/passwd file'. В каждой строке файла `/etc/passwd' определено семь полей, разделенных символом ':':

      arnold:xyzzy:2076:10:Arnold D. Robbins:/home/arnold:/bin/ksh
Для вывода только первого и пятого поля нам необходимо использовать `cut' следующим образом:
      $ cut -d: -f1,5 /etc/passwd
       root:Operator
       ...
       arnold:Arnold D. Robbins
       miriam:Miriam A. Robbins
       ...
Если задана опция `-c', `cut' будет выводить указанные символы (колонки) входной строки. Эта команда удобна для фильтрации данных.

Команда `sort'

Теперь рассмотрим команду `sort'. Это одна из мощнейших команд в UNIX системах, особенно при сортировке потока данных. `sort' читает и сортирует каждый файл, указанный в командной строке. При этом она сливает сортируемые данные и выводит их в стандартный вывод. Если не указаны входные файлы она читает стандартный ввод. Сортировка основана на 'машинной' упорядоченной последовательности (ASCII) или на заданном пользователем критерии упорядочивания. Команда `uniq'

И, наконец, рассмотрим программу `uniq'. При сортировке, Вы встретитесь с повторяющимися строками. Обычно, Вам нужен только один экземпляр каждой строки. Здесь нужна команда `uniq'. Программа `uniq' читает стандартный ввод, который должен быть уже отсортированн. Она выводит только по одному экземпляру каждой повторяющейся строки. Она имеет несколько опций. Позже, мы используем опцию `-c', которая выводит нетождественные строки, с приписанным к началу строки числом повторений этой строки на входе. Параллельный запуск утилит Теперь, предположим, что наша система - большая электронная доска объявлений (BBS) с десятками пользователей вошедших в систему. Руководство советует системному оператору (сисопу) написать программу, которая выводит упорядоченный список вошедьших в систему пользователей. Более того, если кто-то вошел в систему несколько раз, его или ее имя должно только однажды упомиаться в списке.

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

     $ who | cut -c1-8
     arnold
     miriam
     bill
     arnold
И далее, отсортировать список:
     $ who | cut -c1-8 | sort
     arnold
     arnold
     bill
     miriam
И наконец пропустив список через `uniq', отбросить повторения имен:
     $ who | cut -c1-8 | sort | uniq
`uniq' есть другие возможности, которые не допускаются командой `sort -u'.

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

     # cat > /usr/local/bin/listusers
     who | cut -c1-8 | sort | uniq
     ^D
     # chmod +x /usr/local/bin/listusers
Отметим четыре основных пункта.

Первый, состоит в том, что сисоп сэкономил два часа работы, записав несколько команд в одной командной строке. Более того, действие shell-интерпретатора не менее эффективно, чем было бы действие Си программы. Время программиста гораздо дешевле машинного времени, и в современном обществе, в котором "времени никогда не хватает", экономия двух часов личного времяни программиста это не подвиг.

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

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

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

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

Первая - это команда `tr'. Она работает по принципу символ-за-символ замены символов. Обычно, она используется для таких вещей, как преобразование символов верхнего регистра в символы нмжнего регистра:

      $ echo ThIs ExAmPlE HaS MIXED case! | tr '[A-Z]' '[a-z]'
      this example has mixed case!
Для нас представляют интерес следующие опции:
`-c'

работает с дополнением списка символов, т.е. оперирует символами не указанными в списке;

`-d'

опускает при выводе символы указанные в первом списке;

`-s'

сжимает повторяющиеся символы в один символ.

Мы будем использовать все три опции сразу.

Следующая рассматриваемая команда это `comm'. Она читает отсортированные файлы и выводит их строки в три колонки. Колонки состоят из несовпадающих строк первого файла, несовпадающих строк второго файла, и общих строк этих файлов. Опции `-1', `-2', и `-3' подавляют вывод соответствующей колонки. Например:

      $ cat f1
       11111
       22222     
       33333     
       44444     
       $ cat f2
       00000     
       22222     
       33333     
       55555
       $ comm f1 f2
             00000
      11111
                   22222
                   33333
      44444
             55555     

Если вместо имени ф

из стандартного входа.

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

Сначала необходимо преобразовать символы всех регистров в символы какого-нибудь конкретного (у нас нижнего) регистра, т.к. "The" и "the" это одно и тоже слово.

      $ tr '[A-Z]' '[a-z]' < whats.gnu | ...     
Далее, отбросим пунктуацию. Это прстейший способ добиться того, чтобы слова в кавычках и без кавычек воспринимались одинаково.
      $ tr '[A-Z]' '[a-z]' < whats.gnu | tr -cd '[A-Za-z0-9_ \012]' | ...     
Вторая команда `tr' преобразует дополнение списка, содержащего пробел, символ подчеркивания, все буквы и цифры, в символ `\012' (перевода строки). Для удобства вывода можно включить в список еще и ASCII символ TAB.

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

      $ tr '[A-Z]' '[a-z]' < whats.gnu | tr -cd '[A-Za-z0-9_ \012]' | 
      > tr -s '[ ]' '\012' | ...     
Эта команда заменяет пробелы на символы перевода строки. Опция `-s' сжимает последовательные символы перевода стрки в один. (Здесь символ `>' это shell-подсказка, которая указывает, что необходимо закончить список команд.)

Теперь у нас есть строки, содержащие (каждая) по одному слову, при чем все символы относятся к одному регистру. Подсчитаем число повторений каждого слова:

      $ tr '[A-Z]' '[a-z]' < whats.gnu | tr -cd '[A-Za-z0-9_ \012]' |
      > tr -s '[ ]' '\012' | sort | uniq -c | ...
Получаемые данные будут выглядеть примерно так:
        60 a
        2 able
        6 about
        1 above
        2 accomplish
        1 acquire
        1 actually
        2 additional
Они отсортированны по словам, а не по числу повторений! Но мы хотим найти наиболее употребительные слова. Нам помогут еще две опции команды `sort': Итоговый командный канал выглядит так:
      $ tr '[A-Z]' '[a-z]' < whats.gnu | tr -cd '[A-Za-z0-9_ \012]' |
      > tr -s '[ ]' '\012' | sort | uniq -c | sort -nr
      156 the
      60 a 
      58 to 
      51 of 
      51 and 
      ...
Замечательно! Применяя уже известные нам принципы, мы создали полезную программу из шести команд. Для написания той же программы на Си потребовалось бы гораздо больше времени.

Немного изменив построенную цепочку команд, мы получим программу проверки орфографии, которая проверяет правильность написания слов, путем выделения тех слов, которых нет в словаре. Но, для этого нам нужен словарь. Если у Вас стоит "Slackware Linux" полностью, то у Вас есть файл `/usr/lib/ispell/ispell.words'. Это упорядоченный словарь на 38400 слов.

Но как связать наш файл со словарем? Ранее мы генерировали отсортированный список слов, помещенных в отдельные строки:

      $ tr '[A-Z]' '[a-z]' < whats.gnu | tr -cd '[A-Za-z0-9_ \012]' |
     > tr -s '[ ]' '\012' | sort -u | ...
Сейчас, нам нужны все слова списка, которых нет в словаре. Применим здесь команду `comm'.
      $ tr '[A-Z]' '[a-z]' < whats.gnu | tr -cd '[A-Za-z0-9_ \012]' |
     > tr -s '[ ]' '\012' | sort -u |
     > comm -23 - /usr/lib/ispell/ispell.words
Опции `-2' и `-3' отменяют вывод строк, которые есть только в словаре (т.е. во втором файле), и общих строк заданных файлов. Строки, представленные только в первом файле (здесь подразумевается стандартный ввод), это слова, которых нет в словаре. В найденных словах, судя по всему, присутствуют орфографические ошибки.

Следующие утилиты заслуживают особого внимания:

`grep'

ищет файлы, содержащие соответствия регулярному выражению;

`egrep'

аналогично `grep', но оперирует более мощными регулярными выражениями;

`wc'

подсчитывает строки, слова и символы;

`tee'

передает данные в стандартный вывод и, одновременно, копирует их в файл (напоминает Т-образное ответвление командного канала);

`sed'

пакетный редактор, сложная утилита;

`awk'

интерпретатор языка обработки строк, другая сложная утилита.

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

Короче:

  1. Каждая утилита должна безупречно делать что-то одно. Ни больше, ни меньше.
  2. Комбинирование таких утилит гораздо более действенно, чем использование универсальных программ, и позволяет использовать программы по новому (так, как авторы и представить не могли).
  3. Утилита не должна выводить заголовок и хвост, если данные посылаются по командному каналу. (Хотя, мы не всегда следовали этому правилу.)
  4. Пусть кто-то другой делает труднейшую часть работы.
  5. Разбирайтесь в своих утилитах (которые и есть ваши инструментальные программные средства)! Используйте их по назначению. А, если соответствующей утилиты нет, то создайте ее.
Все программы, которые мы обсудили доступны через анонимный `ftp' сервер в `prep.ai.mit.edu', в каталоге `/pub/gnu/textutils-1.9.tar.gz'.

В этой статье не написано ничего нового. Философию инстументальных программных средств впервые описали Брэйн Керниган и П.Дж.Плогер в книге "Инструментальные программные средства" (`Software Tools', Addison-Wesley, ISBN 0-201-03669-X). Эта книга рассказывает как писать и использовать инстументальные программные средства. Сама она была написана в 1976 году, с использованием препроцессора для Фортрана, названного `ratfor' (RATional FORtran). В то время Фортран был гораздо популярнее чем Си. Но препроцессор Фортрана похож на Си, и если Вы знаете Си, то с `ratfor'-программами у Вас проблем не будет.

В 1981 году книгу усовершенствовали и выпустили как "Инструментальные программные средства Паскаля" (`Software Tools in Pascal', Addison-Wesley, ISBN 0-201-10342-7). Обе книги остались в печати. Они полезны для программистов, и вообще, они коренным образом изменили отношение к программированию.

Изначально, программы представленные в книге можно было найти (на магнитной ленте) в издательстве "Addison-Wesley". Но теперь их можно достать только через Интернет. Ранее существовало общество пользователей инстументальных программных средств (Software Tools Users Group), члены которого перенесли исходные `ratfor' программы в каждую систему с Фортран компилятором.

Сейчас эти программы не популярны особенно по сравнению с GNU программами и другими аналогами UNIX программ. Тем не менее эти книги уникальны, как примеры хорошего стиля программирования. И последнее. Когда редактировалась эта статья в ходу была версия 1.9, так что сначала cправьтесь в ближайшем GNU архиве о текущей версии.


Вперед Назад Содержание