Могу ли я обновить свои команды (например, awk, sed) до последней версии в Solaris?

bash-3.00# awk '{print NR}' f1.txt 1 2 3 4 

но FNR ничего не печатает.

 awk '{print FNR}' f1.txt 

приведенная выше строка не дает мне никакого вывода, кажется, что awk, который у меня есть на моем солнце os, не имеет переменной FNR. так что я могу что-то сделать, чтобы стандартизировать его. также, могу ли я получить библиотеку всех последних команд и установить / обновить текущие команды, такие как sed, sort и т. д.

SunOS неизвестен 5.10 Generic_142910-17 i86pc i386 i86pc

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

Если вы начнете заменять /usr/bin/awk на GNU awk, как можно загрузить с http://gnu.org , тогда у вас возникнут проблемы.

Некоторые Unices предоставляют альтернативные версии или бесплатные версии некоторых стандартных утилит. Как правило, они делают это, устанавливая их в другом месте ( /opt/gnu например, для инструментов GNU) или под другим именем ( gawk для GNU awk). Если нет, вы можете загрузить их как источник и создать их, а также самостоятельно установить их в другом месте или под другим именем.

Сказав это, Solaris, как известно, имеет очень старые и нестандартные версии некоторых утилит в /usr/bin и сохраняет современные / стандартные версии в другом месте.

Это случай awk. /usr/bin/awk на Solaris основана на оригинальном awk с 1979. awk был переписан около 1988 года и называется nawk . Все современные реализации awk основаны на этом nawk (поскольку это основано на спецификации awk POSIX).

В Solaris, если вы обновите свой $PATH чтобы поставить себя в стандартную / POSIX-среду (которая обычно включает в себя установку /usr/xpg4/bin и / или /usr/xpg6/bin в начале $PATH ), тогда awk будет стандартный. Кроме того, вы можете вызвать nawk вместо awk .

Это то же самое для sh , вы можете использовать /usr/xpg4/bin/sh или ksh .

В стандартном sh (то есть, not /bin/sh на Solaris) вы также можете использовать

  command -p awk 

Не забудьте назвать портативный awk вместо старого.