PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : gleiche strings aus einer var entfernen



codefritz
08-12-2008, 11:35
in einer variablen sind verschiedne strings abgelegt. (wurde gefuellt mit awk)
dabei kann es vorkommen dass einige identische sind.

wie koennen identische mehrfach vorhandene variablen am besten entfernt werden? (habe in man awk keine moeglichkeit gefunden dass dieser identische strings ignoriert - waere ja auch eine moeglichkeit)

danke

BLUESCREEN3D
08-12-2008, 14:11
Eine Variable in Bash? Ist das ein Array oder wie sind da mehrere Strings drin?
Vllt. hilft dir "sort --unique". Damit kannst du doppelte Zeilen entfernen.

jan61
08-12-2008, 19:26
Moin,

kannst Du mal ein Beispiel bringen, wie die Variable aussieht, welche identischen Strings Du raushaben willst und mit welchem awk Du sie gefüllt hast? Eine Lösung hängt sehr stark davon ab, ob z. B. Trennzeichen dazwischen liegen, ob und wie man die Doubletten identifizieren kann ...

Jan

P.S.: Du kannst im awk natürlich prüfen, ob eine Zeichenkette bereits vorhanden ist - z. B. mit index.

codefritz
10-12-2008, 11:07
ok sorry leute fuer die unverstaendl. ausrucksart.
versuche es anhand eines bsp klar zu machen

bin.inc sieht so aus:

path/xy bin
path/xyz bin
path/xz bin
path/xz sbin
path/xz usr/bin
....



BINS=`cat bin.inc | awk {'print $2'}`


Nun steht in BINS: bin bin bin bin sbin usr/bin
Und alle mehrfach vorkmmenden strings sollten entfernt oder erst gar nicht reingeschrieben werden.

ContainerDriver
10-12-2008, 12:31
Wenn die Reihenfolge egal ist, dann schalte so wie BLUESCREEN3D erwähnt hat ein sort -u zwischen cat und awk, bzw. ersetze das cat durch sort -u (warum erzählt dir jan61 :D ). Vielleicht kannst du mit dem Schalter -m bei sort verhindern, dass die Strings sortiert werden, falls die Reihenfolge wichtig ist.

codefritz
10-12-2008, 12:56
sort -u wirkt wunder! danke euch.

jan61
13-12-2008, 19:45
Moin,


sort -u wirkt wunder! danke euch.

Warum nimmst Du für so eine simple Geschichte das Funktionsmonster awk? Da reicht auch ein cut:
cut -f2 -d" " bin.inc | sort -uDie -d-Option kannst Du weglassen, wenn die Felder nicht durch Leerzeichen, sondern durch Tabs getrennt sind.

Jan

P.S.: Ach ja - der cat ;-) "Useless use of cat award". awk kann wie die meisten Unix-Kommandos Dateinamen als Argument entgegennehmen, ein cat vorneweg ist schlicht und einfach überflüssig, braucht einen zusätzlichen Prozess und baut eine Subshell (in der bash durch die Pipe verursacht) auf.