Shell Удалить более низкие версии из массива - PullRequest
1 голос
/ 08 апреля 2020

У меня есть следующий массив:

ARRAYNAME=(value_1.21.zip value_1.22.zip valueN_0.51.zip valueN_0.52.zip valueM_3.52)

Я хочу удалить младшие версии этого же элемента и получить следующий массив:

ARRAYNAME=(value_1.22.zip valueN_0.52.zip valueM_3.52)

В этот момент я используя этот подход, чтобы удалить те же элементы

ARRAYNAMESORT=$(tr ' ' '\n' <<< "${ARRAYNAME[@]}" | sort -u | tr '\n' ' ')

, но я застрял в удалении более низких версий. У кого-нибудь есть идеи как этого добиться?

1 Ответ

0 голосов
/ 14 апреля 2020

На основе структуры текста [Name]_[version].zip

ARRAYNAME=($(printf '%s\n' "${ARRAYNAME[@]}" | awk '{print $1,$1}' | cut -d'_' -f2- | sort -n | sed  1d | awk '{print $2}' | paste -s))

Объяснение:

  1. печать всех элементов массива printf '%s\n' "${ARRAYNAME[@]}"
  2. дублировать имя в два столбца awk '{print $1,$1}'
  3. удалить левый текст из первого столбца cut -d'_' -f2-
  4. отсортировать, а затем удалить наименьший текст, который находится в первой строке sort -n | sed 1d
  5. получить второй столбец сделать его серийным awk '{print $2}' | paste -s
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...