GNU/Linux >> Znalost Linux >  >> Linux

Jak vytvořit pole jedinečných prvků ze řetězce/pole v Bash?

Pokud mám řetězec „1 2 3 2 1“ – nebo pole [1,2,3,2,1] – jak mohu vybrat jedinečné hodnoty, tj.

"1 2 3 2 1" produces "1 2 3" 

nebo

[1,2,3,2,1] produces [1,2,3]

Podobné jako uniq, ale zdá se, že uniq funguje na celých řádcích, nikoli na vzorech v rámci řádku…

Přijatá odpověď:

S GNU awk (toto také zachová původní pořadí)

printf '%sn' "1 2 3 2 1" | awk -v RS='[[:space:]]+' '!a[$0]++{printf "%s%s", $0, RT}'
1 2 3 

Chcete-li read do bash pole

read -ra arr<<<$(printf '%sn' "1 2 3 2 1" |
 awk -v RS='[[:space:]]+' '!a[$0]++{printf "%s%s", $0, RT}')
printf "%sn"  "${arr[@]}"
1
2
3

Linux
  1. Vytváří `deklare -a A` prázdné pole `a` v Bash?

  2. Jak rozdělit řetězec ve skriptu Bash

  3. Bash pole s příklady

  1. Pole v Bash nenalezeno

  2. Jak mohu získat jedinečné hodnoty z pole v Bash?

  3. jak získat prvky ze seznamu v bash?

  1. Analyzovat jedno pole z pole Json do pole Bash?

  2. Bash Array Of Arrays?

  3. bash - vrátí pole z funkce a zobrazí obsah