GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie erstelle ich ein Array eindeutiger Elemente aus einer Zeichenfolge/einem Array in Bash?

Wenn ich einen String „1 2 3 2 1“ habe – oder ein Array [1,2,3,2,1] – wie kann ich die eindeutigen Werte auswählen, d. h.

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

oder

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

Ähnlich wie uniq, aber uniq scheint auf ganzen Zeilen zu funktionieren, nicht auf Mustern innerhalb einer Zeile …

Akzeptierte Antwort:

Mit GNU awk (dies behält auch die ursprüngliche Reihenfolge bei)

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

Zum read in eine bash Array

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. Ein Feld aus einem Json-Array in ein Bash-Array parsen?

  2. Erstellt `declare -a A` ein leeres Array `a` in Bash?

  3. Bash-Array von Arrays?

  4. So teilen Sie eine Zeichenfolge in Bash-Skript auf

  5. Wie kann ich eindeutige Werte aus einem Array in Bash erhalten?

Bash Break:So verlassen Sie eine Schleife

So erstellen Sie Bash-Aliase

Bash-Arrays

Assoziatives Array in Bash

Bash-Scripting – Indiziertes Array mit Beispielen erklärt

Fehlende Pfade aus dem Bash-Array von Pfaden extrahieren