Есть ли версии Unix, которые не имеют awk в установке по умолчанию?

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

identify -format '%w %h %i\n' ./*.png |
awk '$1 > 400 || $2 > 400 {sub(/^[^ ]* [^ ]* /, ""); print}' |
tr '\n' '\0' |
xargs -0 mogrify -resize '400x400'

Объяснение сценария:

  • Для каждого файла распечатайте строку с шириной, пространством, высотой, пространством и именем файла. В зависимости от Вашей версии identify, \n добавить заключительную новую строку может или быть необходимым (ImageMagick 6.6.0) или лишним, но безопасным (GraphicsMagick 1.1.11).
  • (awk) На каждой строке, если ширина ($1) и высота ($2) соответствуйте необходимым условиям, затем:
    • Удалите весь текст до второго пробела. Это разделяет ширину и высоту.
    • Печать, что остается от строки, которая является именем файла.
  • Замените новые строки нулевыми символами.
  • Звонить xargs -0 выполниться mogrify команда на именах файлов. (Мы не можем использовать плоскость xargs потому что это не может иметь дело с входом, содержащим пробел или \'".)

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

5
10.07.2013, 01:32
3 ответа

Awk является частью POSIX и Единственного Unix (и был, так как они существуют). Это также было частью классического Unix в течение очень долгого времени и установлено по умолчанию на каждом современном законченном Unix.

Awk является несколькими годами, моложе, чем Unix, так очевидно, были версии Unix без Awk. Awk появился в V7 и в BSD начиная с первого полного выпуска. MINIX 2 имел awk; я не уверен, имели ли несколько систем на основе MINIX 1 все его.

Существуют упрощенные нельды сегодня без Awk — главным образом встроенные системы, запускающие Linux с BusyBox. BusyBox действительно имеет команду awk, но это является дополнительным, как почти все в BusyBox.

Как социологический вопрос, если кто-то говорит Вам, что у них есть “система Unix” или “система Linux” (или варианты этого), можно безопасно предположить, что у них есть awk. Необходимо только волноваться о доступности awk, если Вам говорят, что они выполняют старинную систему или упрощенную систему.

13
27.01.2020, 20:31
  • 1
    +1, специально для BusyBox. Это соответствует отлично тому, в чем я нуждался. awk включенный с Android BusyBox APK? –  DVK 10.07.2013, 01:24
  • 2
  • 3
    @slm - Yay! Это означает, что Android имеет и Perl и Awk (первый через ASE). Теперь я могу начать программировать на нем :) –  DVK 10.07.2013, 01:29
  • 4
    я не соглашаюсь с этим ответом. Операционная система без awk не является "упрощенным Unix", потому что это не Unix. BusyBox не утверждает, что был Unix, потому что это не. Вопрос не был, "там ОС без awk"; это было, "там нельды без awk", и ответ должен быть "нет" по определению. –  rici 10.07.2013, 01:41
  • 5
    @rici Unix V1 через V6 является едва “не Unix”, хотя Вы могли утверждать, что они были Unix, но не. BusyBox действительно стремится быть пакетом утилит Unix — конечно, если Вы не установите полный пакет, Вы не получаете все утилиты, но BB разработан для размещения частичных установок. Нет никакого фиксированного определения Unix; совершенно разумно назвать встроенное устройство, выполняющее установку BusyBox без awk “упрощенный Unix”. –  Gilles 'SO- stop being evil' 10.07.2013, 01:49

Страница Википедии AWK указывает это следующим образом:

выборка

Как один из ранних инструментов для появления в Unix Версии 7 это завоевало популярность, поскольку способом добавить вычислительные опции к конвейеру Unix и помимо Оболочки Bourne является единственный язык сценариев, доступный в стандартной среде Unix. Это - одна из обязательных утилит Единственной Спецификации UNIX; требуемый Стандартом Linux Основная спецификация — и реализации AWK существует почти для всех других операционных систем.

Учитывая это я сказал бы, что нет версии UNIX, который обходится включая AWK.

Частичные реализации?

Вот то, где это может войти в серую область. Приложения как Busybox включают подмножество функций awk, таким образом, трудно квалифицировать, включено ли это или нет.

Посмотрите то, что включено в Android APK, например:

4
27.01.2020, 20:31
  • 1
    "реализация существует"! =, "включен в распределение по умолчанию в разделенном вниз встроенная версия". См. ответ Gilles для примера. –  DVK 10.07.2013, 01:27
  • 2
    @DVK - видят мой комментарий к ответу Gilles. AWK включен в busybox APK Android. Это разделяется вниз, как Вы говорите. Походит на семантику немного, часть, он - функциональность, включен в busybox, то, что по Вашему определению, "не включенному" b/c, это не полное внедрение? –  slm♦ 10.07.2013, 01:28

В установках Solaris для «малых серверов» нет Awk, совместимого с POSIX -.

Технически это означает, что они не POSIX и не UNIX, но вполне возможно, что вы захотите, чтобы ваш сценарий работал на этих системах.

Дополнительную информацию см. в :

.
3
20.08.2021, 13:09

Теги

Похожие вопросы