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
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"
> bash:
> datei=/pfad/zur/datei
> zeilenanzahl=$(wc -l <"$datei")
> index=$(($RANDOM%zeilenanzahl))
index=$(($RANDOM % zeilenzahl + 1))
zeile="$(sed -ne "${index}p" $datei)"
Sascha
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.
> 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
Hallo,
Wie funktioniert das mit mehreren zufälligen Zeilen ?
z.B. für eine "Random Playlist"
Gruß
Kai
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