PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : "zufälligen" grep aus ner textdatei



timon
03-09-2003, 16:23
hallo zusammen,

ich habe ein textfile mit "sprüchen des tages". nun möchte ich im prinzip haben , das er mir irgendwie aus dieser datei einen zufällig rausholt. so in richtung:

cat blabla | grep -random

zumindest in der art :)

wie realisier ich sowas am einfachsten ? wenn möglich über die bash.

vielen dank und viele grüsse

timon

tomes
03-09-2003, 20:14
TEST=`cat blabla`
# Zufallszahl ;)
Z=(($RANDOM%7))
X=(($RANDOM%9))
ZU=$Z$X
n=0
for i in $TEST;do
n=$(( $n + 1 ));
if (( $n == $ZU ));then
echo $i;
fi;
done

Mit der Zufallszahl musst du einfach probieren, jedenfalls ist $RANDOM eine integer Zufalls-Zahl.

T;o)Mes

timon
03-09-2003, 21:34
hi tomes,

vielen dank für deinen code. google grad um ihn zu verstehen :)

gibt noch ein prob:


./testc: line 9: ((: 8559 == : syntax error: operand expected (error token is " ")


ist dann diese zeile: if (( $n == $ZU ));then

werd ich weiterbasteln, danke für diene anregung.

timon

phate
04-09-2003, 07:25
Hi timon,

Deine Variable $ZU scheint keinen Wert zu haben. Füge zu Beginn des Skriptes
set -xein. Dadurch werden die Befehlszeilen nach Variablenexpansion auf dem Bildschirm ausgegeben und Du siehst was tatsächlich ausgeführt wird.

pitu
04-09-2003, 07:41
TEST=`cat blabla`
# Zufallszahl
Z=(($RANDOM%7))
X=(($RANDOM%9))
ZU=$Z$X

Der Ansatz ist soweit Ok, zuerst wird in die Variable Test alles eingelesen, was in der Datei blah blah steht.
Dann werden 2 integere Zufallszahlen erzeugt und zu einer zufallszahl. damit hast du dann eine zufallszahl von 0-99 ... glaub ich.

Im naechsten schritt wird alles in $TEST durchgezaelt und das was an der stelle von der zweistelligen zufallszahl steht, ausgegeben. Allerdings wird dort, nun nur ein Wort anstatt einer Zeile ausgegeben ;)

Daher:


#!/bin/sh
Z=(($RANDOM%7))
X=(($RANDOM%9))
ZU=$Z$X
head -n $ZU dateimitspruechen | tail -n 1


"head -n $ZU" druckt aus deiner Datei die ersten $ZU zeilen aus und "tail -n 1" nimmt davon die letzte.

gruss,
pitu

timon
05-09-2003, 11:34
@ pitu vielen dank für die erklärung und die änderung, funzt :)

timon