Random


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Random
# 1  
Old 05-24-2007
Random

My problem is as follow and i hope you can help:

I currently have this function:

Code:
stored_word()
{
number=$RANDOM
let "number %= 21"
case $number in
0 ) echo "energy"    ;;  1 ) echo "touch" ;;
2 ) echo "climbing" ;;   3 ) echo "declare" ;;
4 ) echo "marry"  ;;     5 ) echo "relax"   ;;
6 ) echo "bugs"     ;;   7 ) echo "inaccessible" ;;
8 ) echo "country" ;;    9 ) echo "folder" ;;
10 ) echo "individual" ;; 11 ) echo "youngest" ;;
12 ) echo "disco" ;; 13 ) echo "disturbed" ;;
14 ) echo "company" ;; 15 ) echo "scientific" ;;
16 ) echo "disaster" ;; 17 ) echo "protection" ;;
18 ) echo "curiously" ;; 19 ) echo "deranging" ;;
21 ) echo "facilities"

esac
 }

then i recalled it using the Dot command suggested here into my script as follow:

Code:
        . hangman_words
        word=$(stored_word)
        letters=$(echo $word | wc -c)
        letters=$(( $letters - 1 ))
        template="$(echo $word | tr '[a-z A-Z 0-9]' '.')"
        remaining=$letters

works fine, but the words should not be in a function or hard coded... and tbh i am not what i need to do, to create a word randomly, and sed and awk are out of question as well.

Can any one shed a light on this please?

K
# 2  
Old 05-24-2007
Code:
number=$(( RANDOM % 21 + 1 ))
word=$( sed -n "$number p" words_list_file )
letters=$(echo $word | wc -c)
letters=$(( $letters - 1 ))
template="$(echo $word | tr '[a-z A-Z 0-9]' '.')"
remaining=$letters

# 3  
Old 05-24-2007
Quote:
Originally Posted by anbu23
Code:
number=$(( RANDOM % 21 + 1 ))
word=$( sed -n "$number p" words_list_file )
letters=$(echo $word | wc -c)
letters=$(( $letters - 1 ))
template="$(echo $word | tr '[a-z A-Z 0-9]' '.')"
remaining=$letters

what can be used instead of sed, as i dont know anything about sed and rather learn shell scripting first and then look at sed, also just so i can understand this better, the random word file, needs to one word per line and numbered for this to work??

You are a star

Keyvan

Last edited by keyvan; 05-24-2007 at 09:25 AM.. Reason: more information
# 4  
Old 05-24-2007
You can store all the words in a file (assume words.txt).
Code:
stored_word()
{
   if [ -z "$stored_words_count" ]
   then
      stored_words_count=$(wc -l < words.txt)
   fi
   number=$RANDOM
   let "number = number % stored_words_count + 1"
   tail +$number words.txt | head -1
}

Another solution is to read the file into an array.
Code:
init_stored_words()
{
   while read w
   do
      words[${#words[@]}]=$w
   done < words.txt
   stored_words_count=${#words[@]}
}
stored_word()
{
   [ -z "$stored_words_count" ] && init_stored_words
   number=$RANDOM
   let "number %= stored_words_count"
   echo  ${words[$number]}
}

Jean-Pierre.

Last edited by aigles; 05-24-2007 at 01:31 PM.. Reason: Modify number calculation for tail/head solution.
# 5  
Old 05-24-2007
Quote:
Originally Posted by keyvan
what can be used instead of sed, as i dont know anything about sed and rather learn shell scripting first and then look at sed, also just so i can understand this better, the random word file, needs to one word per line and numbered for this to work??

You are a star

Keyvan
Code:
no=$(( RANDOM % 21 + 1 ))
while read str
do
	(( no = no - 1 ))
	if [[ $no -eq 0 ]]; then
		word=$str
		break
	fi
done < words_list_file 
letters=$(echo $word | wc -c)
letters=$(( $letters - 1 ))
template="$(echo $word | tr '[a-z A-Z 0-9]' '.')"
remaining=$letters

# 6  
Old 05-24-2007
Quote:
Originally Posted by anbu23
Code:
no=$(( RANDOM % 21 + 1 ))
while read str
do
	(( no = no - 1 ))
	if [[ $no -eq 0 ]]; then
		word=$str
		break
	fi
done < words_list_file 
letters=$(echo $word | wc -c)
letters=$(( $letters - 1 ))
template="$(echo $word | tr '[a-z A-Z 0-9]' '.')"
remaining=$letters

am i correct to assume that the above script will produce a random word, as long as the words are set as follow:

[TEXT]
word1
word2
word3
word4
etc..
[/TEXT]

K
# 7  
Old 05-24-2007
Quote:
Originally Posted by keyvan
am i correct to assume that the above script will produce a random word, as long as the words are set as follow:

[TEXT]
word1
word2
word3
word4
etc..
[/TEXT]

K
You are right. Keep each word in a separate line
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Homework & Coursework Questions

Random numbers

Use and complete the template provided. The entire template must be completed. If you don't, your post may be deleted! Write a shell script that will take the sum of two random number? Ex: Random n1 +Random n2 = result i tries to write it but i had some dufficulties ... (3 Replies)
Discussion started by: renegade755
3 Replies

2. Shell Programming and Scripting

Need to generate a file with random data. /dev/[u]random doesn't exist.

Need to use dd to generate a large file from a sample file of random data. This is because I don't have /dev/urandom. I create a named pipe then: dd if=mynamed.fifo do=myfile.fifo bs=1024 count=1024 but when I cat a file to the fifo that's 1024 random bytes: cat randomfile.txt >... (7 Replies)
Discussion started by: Devyn
7 Replies

3. Shell Programming and Scripting

Random Variable

Hi, Could you please let me know what the following code does, I know that it means generating random numbers, however not sure what is the entire purpose. R=$(($RANDOM % 2)) delay=$(($RANDOM % 10)) if then TEXT='X' else ... (3 Replies)
Discussion started by: susankoperna1
3 Replies

4. Shell Programming and Scripting

Random ordering

1 2 4 5 3 I would like to use a script so that i can randomly rearrange these numbers such as 3 5 2 4 1 Thanks! (3 Replies)
Discussion started by: johnkim0806
3 Replies

5. UNIX for Dummies Questions & Answers

Random Crashing

Over the last month or so my CentOS server has been crashing for reasons I do not know. It has been running for over a year with regular yum updates without problems. The load on the server is perfectly normal with CPU usage at 5-6% and RAM usage at less than half of 32GB of RAM (multiple smaller... (3 Replies)
Discussion started by: spinner0205
3 Replies

6. Programming

random number

How can I choose randomly the row numbers of my file in awk? (4 Replies)
Discussion started by: Homa
4 Replies

7. Ubuntu

expect script for random password and random commands

Hi I am new to expect. Please if any one can help on my issue its really appreciable. here is my issue: I want expect script for random passwords and random commands generation. please can anyone help me? Many Thanks in advance (0 Replies)
Discussion started by: vanid
0 Replies

8. UNIX for Dummies Questions & Answers

random words

Hi there folks, for an exercise for my pupils (you know i am always thinking of them!) i need to randomly re-arrange the words (blank space separated) in a sentence (a line in a textfile). Any inspiration?? Txk so much. (9 Replies)
Discussion started by: eldeingles
9 Replies

9. Shell Programming and Scripting

$random

I need to use the $RANDOM command to get a line from a list of lines in a file randomly. file is help go three house film how do i randomly get one word without looking into the file? (6 Replies)
Discussion started by: relle
6 Replies

10. Shell Programming and Scripting

Getting a random file

Hello, I am very new to shell scripting. This problem seems quite easy so it should be quite easy (I hope ^^) I want to get a random file from a directory. this file will be in one subdirectory, and it will contain spaces. code I have got so far: N=find ./*/*.jpg | wc -l ((N=RANDOM%N)) ... (6 Replies)
Discussion started by: davidY
6 Replies
Login or Register to Ask a Question