Как выбрать уникальные значения массива?

sort значением по умолчанию использует всю строку в качестве ключа

join использование только указанное поле как ключ.

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

Состояния страницы справочника Соединения:

Важный: FILE1 и FILE2 должны быть отсортированы на объединяющих полях. Например, используйте 'вид-k 1b, 1', если> 'соединение' не имеет никаких опций. Примечание, сравнения соблюдают правила, указанные 'LC_COLLATE'. Если> вход не будет отсортирован, и к некоторым строкам нельзя присоединиться, то предупреждающее сообщение будет дано.

3
10.11.2014, 18:26
2 ответа

Вы можете использовать ассоциативный массив:

declare -A versions
for value in "${ruby_versions[@]}"; do
    versions["${value##*::}"]=1
done
printf "%s\n" "${!versions[@]}"
1.7.4
1.7.13
2.1.1

или с трубопроводом:

mapfile -t versions < <(printf "%s\n" "${ruby_versions[@]}" | sed 's/.*:://' | sort -u)
printf "%s\n" "${versions[@]}"
1.7.13
1.7.4
2.1.1
2
27.01.2020, 21:23
echo "${ruby_versions[@]}" | sed 's/\S\+:://g;s/\s\+/\n/g'| sort -u

выводы:

1.7.13
1.7.4
2.1.1

Или если вы хотели бы builtins

unset u
for i in "${ruby_versions[@]}"
do
  if [[ ! $u =~ ${i##*::} ]]
  then
    u=${u:+$u\\n}${i##*::}
  fi
done
echo -e "$u"
1
27.01.2020, 21:23

Теги

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