[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [gelöst]Re: /bin/sh: prüfen ob String1 "Wort" aus String2 enthält



Michael Lange schrieb am 03. Jan um 19:11 Uhr:
> On Tue, 3 Jan 2017 08:49:19 +0100
> Jochen Spieker <ml@well-adjusted.de> wrote:

> Wenn man die ganzen "Paketlisten" auf einmal an grep (oder wie von
> Christian vorgeschlagen uniq) weiterreicht, ist das bestimmt schneller,
> aber dann muss ich wieder über die Argumentlänge nachdenken. Ich habe mir
> mal eine Beschreibung zum Thema auf
> http://www.in-ulm.de/~mascheck/various/argmax/
> angeschaut und bin dann für mich zum Ergebnis gekommen, dass ich davon
> besser die Finger lasse, ich habe damit nicht wirklich das Gefühl, dass
> ich "weiss was ich tue" und möchte nicht nochmal in die gleiche Falle
> tappen.

Das stimmt nicht. Wenn du das von mir vorgeschlagene

~$ echo $INSTALLED_PKGS $PKGNAMES | tr " " "\n" | sort | uniq -d

mit grossen Paketlisten verwendest, nimmst du cat:

~$ cat INSTALLED_PKGS PKGNAMES | tr " " "\n" | sort | uniq -d

in der pipe gibt es kein Problem mit "zu lang". Die Paketlisten sind dann
ohnehin in Dateien gespeichert - hoffentlich. Wenn schon jeder Name sauber
auf einer Zeile steht, kannst du es noch vereinfachen:

~$ cat INSTALLED_PKGS PKGNAMES | sort | uniq -d

Die Aufgabe ist hier sehr simpel, die Schnittmenge zweier Listen. Der
Algorithmus, sortieren und Doubletten ausgeben, dürfte ziemlich nahe am
Optimum liegen, und skaliert mit n log n auch gut.

Der Sinn, das mit bash-Mitteln lösen zu wollen, und die Listen in Variablen
zu packen, liegt allein darin, sich die Anlage und den Umgang mit Dateien zu
ersparen, weil man davon ausgeht, dass die CPU-Last keine Rolle spielt.

Wenn es dir aber um Geschwindigkeit geht, und die Paketlisten länger werden
- Debian hat weit über 40.000 - dann ist es klar, das die Lösung mit der
Pipe schneller als jedes Shellscript ist.

Mach ein paar Tests, dann ist es klar. Ich habe spasseshalber ein Tcl Script
geschrieben, dass ist auch schneller als jede Shell, aber an die Pipe, an
sort und uniq, kommt es nicht ran.

Gruß
Christian

-- 
Christian Knoke            * * *            http://cknoke.de
* * * * * * * * *  Ceterum censeo Microsoft esse dividendum.


Reply to: