Это более или менее дополнительный вопрос к следующим двум:
- Синтаксическая ошибка при удалении повторяющихся строк через файл awk '! X [$ 0] ++'
- альтернатива awk / nawk в SunO и Linux
Я вижу, что в Solaris 10 (SunOS 5.10) я получаю следующие результаты:
$ type -a awk
awk is /usr/bin/awk
$ PATH="$(getconf PATH)" type -a awk
awk is /usr/xpg4/bin/awk
awk is /usr/bin/awk
$
На Solaris 10 /usr/bin/awk
не принимает стандартный синтаксис Awk POSIX, например '!x[$0]++'
, но принимает /usr/xpg4/bin/awk
. Пока достаточно хорошо.
Тем не менее, на Solaris 11, есть только /usr/bin/awk
даже с getconf PATH
. Хотя есть nawk
и oawk
есть /usr/bin
, на них явно не указывают символические ссылки откуда-либо.
Зная, что Solaris сертифицирован POSIX, меня это удивило.
Как я могу получить POSIX-совместимый Awk стандартно на Solaris 11, используя переносимый код, который также будет работать на других POSIX-совместимых системах? (Или это единственный вариант проверить наличие nawk
или oawk
использовать один из них, если он есть?)
В этом отношении, что есть nawk
и oawk
?
/usr/xpg4/bin/awk
нет в солярисе 11?nawk
"новаawk
", улучшенный AT & Tawk
.Ответы:
В полной или настольной установке Solaris 11 доступно три
awk
реализации, а также несколько вариантов:Все они «соответствуют стандартам», хотя и соответствуют различным стандартам.
/usr/bin/awk
соответствует устаревшейawk
реализации UNIX, выпущенной в 1977 году. В системной переменной PATH по умолчанию она сохраняется первой, чтобы не нарушать существующие сценарии, поскольку последующиеawk
выпуски нарушают совместимость.oawk
является синонимомawk
/usr/bin/nawk
это «новая» версияawk
, впервые выпущенная в SVR3.1 в 1986 году.Awk
Стандарт POSIX был основан на этой реализации./usr/xpg4/bin/awk
почти идентичен предыдущему, но тот, который формально проверен на соответствие тестам соответствия POSIX./usr/gnu/bin/awk
также/usr/bin/gawk
является вариантом GNUawk
. Он направлен на то, чтобы соответствовать большинству или всем стандартам POSIX, когда переменная окруженияPOSIXLY_CORRECT
установлена в среде или когда вызывается с-W posix
опцией, но в противном случае добавляет множество конкретных собственных расширений.igawk
иpgawk
сами являются расширениямиgawk
, первый поддерживает включаемые файлы, а второй поддерживает профилирование.Смотрите также главу истории GNU
awk
для получения много полезной информации.Только
core-os
пакеты гарантированно присутствуют при обычной установке Solaris 11, поэтому толькоoawk/awk
иnawk
есть. В частности, когда вы создаете новую неглобальную зону , она по умолчанию содержитsolaris-small-server
групповой пакет, поэтомуxpg4
ниgnu
awk
двоичные файлы, ни двоичные файлы недоступны. Это по замыслу.solaris-small-server
Группа является минимальной начальной точкой , к которой вы добавляете необходимые пакеты для ваших приложений для правильной работы. Это более безопасный и эффективный способ, чем предыдущий (Solaris 10), когда все, что установлено в глобальной зоне, было установлено и в неглобальной, поэтому вам пришлось удалять неиспользуемые пакеты, когда вы хотели минимизировать зону.Чтобы получить POSIX-
awk
поддержку переносимым способом в такой «небольшой серверной» установке, вам нужно установитьxcu4
пакет и настроить PATH на POSIX-совместимый:Должен ли по каким - то причинам вы не хотите установить этот пакет, обходной путь заключается в использовании «обычай» ,
PATH
содержащий ,nawk
какawk
, например:В качестве альтернативы, вы можете установить
GNU awk
и настроить его,PATH
чтобы получить его первым:Обратите внимание, что это не относится к Solaris 11. Подобная группировка пакетов уже существовала в Solaris 10 и более ранних версиях, и совместимые с POSIX утилиты были установлены только в метакластерах «Конечный пользователь», «Разработчик» и «Полная установка». Установка системы или зоны с метакластером «Core» или «Networking support» привела бы к той же самой
xpg4
отсутствующей проблеме.Также обратите внимание, что отсутствие
/usr/xpg4/bin/awk
в системе Solaris 11 не является ошибкой соблюдения POSIX. Только полные установки Solaris используются в подавляющем большинстве тестов, выполняемых Oracle и ISV, включая программу сертификации Open Group . Сокращенные установки поддерживаются, но не квалифицируются .Если вы распространяете сценарии оболочки (или приложения, внедряющие сценарии оболочки / вызывая команды оболочки) для Solaris 11, вам просто нужно определить
/system/xopen/xcu4
как зависимость в их пакете IPS , и установщик автоматически сделает то, что требуется для правильной работы сценария:См. Https://docs.oracle.com/cd/E53394_01/html/E54820/dependtypes.html.
источник
awk
всегда присутствует в системе Solaris или неглобальной зоне, поэтому проблема не в доступности, а в ограничении имени команды (nawk
vsawk
). docs.oracle.com/cd/E53394_01/html/E54763/nawk-1.htmlnawk
почти POSIX (он не поддерживает,CONVFMT
например), но да, по крайней мере, это не так плохо, какgrep
(у него нет POSIX-e
/-E
) илиtr
(у него нетtr a-f A-F
).