Pull random line from a file

Conrad Newton conrad.newton at broadpark.no
Fri Sep 6 00:34:36 PDT 2002

On Fri, Sep 06, 2002 at 09:05:39AM +0200, Conrad Newton wrote:
> On Fri, Sep 06, 2002 at 01:32:40AM +0200, Björn Lindberg wrote:
> > Kevan Shea wrote:
> > > 
> > > I want to pull a random line from a file in a bash script.  I can generate the random number fine, but how would I go about pulling a single line from a file?
> > > 
> > > I figure this is a one-line sed at worst, but I'm woefully lost by any sed that isn't s/find/replace/ and I can't figure what else I would use... fortune maybe?
> > 
> > If you know that the random number is not higher than the line count for
> > the file, you can do this
> > 
> > 	line=$(sed -n ${random}p $file)
> > 
> > where you have the random line number in $random and the filename in
> > $file. (Eg 5p is the command for printing the 5th line in sed.)

Sorry, in my previous post, I had an off by 1 error!

If you are worried about having too large a random number, try this:

sed -n $[ $RANDOM % $(wc -l < $filename) + 1 ]p $filename

Notice that RANDOM is defined in bash.  From the info file 

- Each time this parameter is referenced, 
  a random integer between 0 and 32767 is generated.

Unsubscribe: send email to listar at linuxfromscratch.org
and put 'unsubscribe lfs-chat' in the subject header of the message

More information about the lfs-chat mailing list