Если у меня есть строка «1 2 3 2 1» - или массив [1,2,3,2,1] - как я могу выбрать уникальные значения, т.е.
"1 2 3 2 1" produces "1 2 3"
или
[1,2,3,2,1] produces [1,2,3]
Похоже на uniq, но uniq, похоже, работает на целых строках, а не на шаблонах внутри строки ...
bash
массив, добавил способЕсли вы используете zsh:
или (если
KSH_ARRAYS
опция не установлена) дажеисточник
"${(u)array[@]}"
или"${(@u)array}"
вместо (обратите внимание на кавычки).${(u)array}
работает, даже если массив пуст или содержит пустую строку, без кавычек.Для массива с произвольными значениями это довольно сложно, так
bash
как для этого нет встроенного оператора.bash
однако случается, что он не поддерживает сохранение символов NUL в своих переменных, поэтому вы можете использовать это для передачи этого другим командам:Эквивалент
zsh
's:на недавней системе GNU, может быть:
В качестве альтернативы, в последних версиях
bash
и при условии, что ни один из элементов массива не пуст, вы можете использовать ассоциативные массивы:С bash 4.4 и новее и с GNU
sort
:Порядок элементов не будет одинаковым в этих разных решениях.
С
tcsh
:Сохранить Будет ли е IRST элемент (
a b a
=>a b
) , какzsh
«S(u)
флага расширения.Сохранит последний (
a b a
=>b a
). Однако те удаляют пустые элементы из массива.источник
Это решение сработало для меня.
Выше приведено 1 2 3 в качестве выхода.
Более короткая версия, предложенная Костасом, может быть такой:
Чтобы сохранить конечные результаты в массиве, вы можете сделать что-то вроде:
Теперь, когда я включаю эхо
arr
, это вывод, который я получаю.Ссылки
https://stackoverflow.com/a/13648438/1742825 https://stackoverflow.com/a/9449633/1742825
источник
tr '\n' ' '
Чтобы сделать это целиком в оболочке и поместить результат в массив,
Словами: если мы еще не видели данное слово, добавьте его в
result
массив и отметьте его как увиденное. Как только слово было замечено, игнорируйте последующие появления этого слова.источник
unset seen
прежде чемdeclare -A seen
в случае$seen
было определено ранее (даже в качестве скалярной переменной из окружающей среды).