[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



Hallo,

On Sun, 1 Jan 2017 01:19:21 +0100
Jochen Spieker <ml@well-adjusted.de> wrote:

> Michael Lange:
> > 
> >     INSTALLED_PKGS=$(echo `apt-mark showauto` `apt-mark showmanual`)
> >     PKGS=""
> >     for p in $PKGNAMES; do
> >         case " $INSTALLED_PKGS " in
> >             *" $p "*)
> >                 PKGS="$PKGS $p"
> >             ;;
> >         esac
> >     done
> >     PKGNAMES="$PKGS"
> 
> Als (ehemaliger) Softwareentwickler blutet mir dabei allerdings das
> Herz. Das wird mit vielen Paketen sehr ineffizient.

Erstaunlicherweise nicht, allerdings brauchte es dafür noch eine kleine
Änderung. Das fiel mir auf, als ich versuchte das obige mit posh laufen
zu lassen, was dann zu etwas seltsamen Resultaten führte. Die Lösung war
schliesslich, das ganze folgendermassen zu ändern:

PKGS=""
for p in "$PKGNAMES"; do
    case " $INSTALLED_PKGS " in
        *" $p "*)
           PKGS="$PKGS $p";;
    esac
done
PKGNAMES="$PKGS"

Ich habe dann zum Vergleich auf einem alten, langsamen Rechner (Pentium M
1100 MHz, 32Bit) verschiedene Varianten durch /usr/bin/time aufrufen
lassen, mit einer unrealistisch grossen PKGNAMES Liste (ca. 2000 Pakete
von ca. 2300 insgesamt installierten).
Resultat:
Die von dir und Christian vorgeschlagenen Varianten mit "comm" und
"uniq" brauchen mit bash jew. ca. 7/100 Sek., mit dash ca. 4/100, egal
wie gross PKGNAMES ist. Ich vermute, das ist die Zeit, die die Shell
benötigt, um die Subshell zu starten und das Programm aufzurufen, und das
Programm selbst erledigt die Arbeit dann praktisch in 0,nix .
Die "case" Variante benötigte in der Version ohne die Anführungszeichen
um $PKGNAMES mit bash ca. 8 Sek. , mit dash ca. 1 Sek. .
Mit den Anführungszeichen allerdings braucht die bash dann nur noch 2/100
Sek. , die dash schaffte es laut time in 0,00 Sek. !
Das hat mich dann doch wirklich verblüfft, man lernt nie aus! :-)

Vielen Dank für die Hilfe!
Ich wünsche allen noch ein schönes neues Jahr!

Michael

.-.. .. ...- .   .-.. --- -. --.   .- -. -..   .--. .-. --- ... .--. . .-.

Many Myths are based on truth
		-- Spock, "The Way to Eden",  stardate 5832.3


Reply to: