Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

zufällige Zeilen auslesen

11 views
Skip to first unread message

Hans Novak

unread,
Mar 2, 2009, 3:31:50 AM3/2/09
to
Hallo,

ich möchte in der shell (bash/sh/ ich benutze ein Debian 4) aus einer
Datei mit ca. 100 Zeilen diese zufällig auslesen und benötige die Zeile
dann in zur weiteren Benutzung in einem String.

Hans

Hauke Laging

unread,
Mar 2, 2009, 6:30:09 AM3/2/09
to

Du willst EINE zufällige Zeile haben?


bash:
datei=/pfad/zur/datei
zeilenanzahl=$(wc -l <"$datei")
index=$(($RANDOM%zeilenanzahl))
for((i=0;i<index;i++))
do
read zufallszeile
done <"$datei"

echo "Es wurde Zeile ${index} zufällig ausgewählt:"
echo "$zufallszeile"


Hauke
--
http://www.hauke-laging.de/ideen/

Sascha Hüdepohl

unread,
Mar 2, 2009, 6:40:58 AM3/2/09
to
Hauke Laging <1q2...@hauke-laging.de> schrieb:

> bash:
> datei=/pfad/zur/datei
> zeilenanzahl=$(wc -l <"$datei")
> index=$(($RANDOM%zeilenanzahl))

index=$(($RANDOM % zeilenzahl + 1))
zeile="$(sed -ne "${index}p" $datei)"

Sascha

Hauke Laging

unread,
Mar 2, 2009, 7:14:17 AM3/2/09
to

Daran hatte ich auch gedacht, aber man soll ja nicht mehr Prozesse
starten als unbedingt nötig... :-)

Vermutlich muss die Datei ziemlich groß werden, damit sed die
read-Variante einholt.


Hauke
--
http://www.hauke-laging.de/ideen/

Sascha Hüdepohl

unread,
Mar 2, 2009, 12:12:53 PM3/2/09
to
Hauke Laging schrieb:

> Sascha Hüdepohl schrieb am Montag 02 März 2009 12:40:
>
> > index=$(($RANDOM % zeilenzahl + 1))
> > zeile="$(sed -ne "${index}p" $datei)"
>
> Daran hatte ich auch gedacht, aber man soll ja nicht mehr Prozesse
> starten als unbedingt nötig... :-)

So kann man natürlich auch daran gehen.
Aber ich glaube das gilt eher für den Fall in dem man innerhalb einer
Schleife Prozesse erzeugt. Bei nur einem einziegen Aufruf fällt das
wohl nicht ins Gewicht. Unix ist schließlich darauf optimiert schnell
neue Prozesse erzeugen zu können.
Vielleicht kann man ja gelten lassen, daß mein Code kürzer und damit
übersichtlicher ist.

Gruß
Sascha

Kai Kesper

unread,
Jun 21, 2009, 12:44:38 PM6/21/09
to
Hauke Laging schrieb:

Hallo,

Wie funktioniert das mit mehreren zufälligen Zeilen ?
z.B. für eine "Random Playlist"


Gruß

Kai

Message has been deleted

Kai Kesper

unread,
Dec 26, 2009, 5:34:44 PM12/26/09
to
Cyrus Kriticos schrieb:

> Kai Kesper wrote:
>> Hauke Laging schrieb:
>>> Hans Novak schrieb am Montag 02 Mᅵrz 2009 09:31:
>>>> [...]
>>>> ich mᅵchte in der shell (bash/sh/ ich benutze ein Debian 4) aus
>>>> einer Datei mit ca. 100 Zeilen diese zufᅵllig auslesen und benᅵtige

>>>> die Zeile dann in zur weiteren Benutzung in einem String.
>>> Du willst EINE zufᅵllige Zeile haben?
>>>
>> [...]
>> Wie funktioniert das mit mehreren zufᅵlligen Zeilen ?
>> z.B. fᅵr eine "Random Playlist"
>
> Die Theorie zur Dublettenvermeidung: Gehe die Datei Zeile fᅵr Zeile
> durch und tausche die aktuelle mit einer anderen zufᅵllig ausgewᅵhlten
> Zeile aus. D.h. die Datei wird gemischt und Du hast Deine Playlist ohne
> Dubletten.
>
Ich habe das nun so gelᅵst, das ich die ausgewᅵhlte Zeile aus der Musikliste lᅵsche.


zeilenanzahl=$(wc -l <"$MUSIK1")
hnmus=$(($RANDOM%zeilenanzahl+1))
for((h=0;h<hnmus;h++))
do
read rndmusik
done <"$MUSIK1"
echo "$rndmusik" >>$VERZ/temp/musik.lst
sed -i ''${hnmus}'d' $MUSIK1

Die Musikliste lasse ich dann alle 2 Tage erneuern.

Gruᅵ

Kai

0 new messages