MLSC
MLSC

Reputation: 5972

how to random lines in txt with bash

I have a txt file with some lines such as:

a
b
c
f
e
f
1
2
3
4
5
6

now I want to random lines and print it to another txt file for example:

f
6
e
1
and so on...

could any body help me? I am new in bash scripting

Upvotes: 0

Views: 227

Answers (4)

chepner
chepner

Reputation: 531065

Iterate over the file, outputting each line with a certain probability (in this example, with roughly a 10% chance for each line:

while read line; do
    if (( RANDOM % 10 == 0 )); then
        echo "$line"
    fi
done < file.txt

(I say "roughly", because the value of RANDOM ranges between 0 and 32767. As such, there are slightly more values that will produce a remainder of 0-7 than there are that will produce a remainder of 8 or 9 when divided by 10. Other probabilities are have similar problems; you can fine-tune the expression to be more precise, but I leave that as an exercise to the reader.)

Upvotes: 2

anubhava
anubhava

Reputation: 785098

For less fortunates systems without GNU utils like BSD/OSX you can use this code:

for ((i=0; i<10; i++)); do
    n=$((RANDOM%10))
    sed $n'q;d' file
done

Upvotes: 1

&#201;douard Lopez
&#201;douard Lopez

Reputation: 43391

There is an option for that

sort -R /your/file.txt

Expanation

-R, --random-sort

   sort by random hash of keys

Upvotes: 2

devnull
devnull

Reputation: 123458

You could use shuf (a part of GNU coreutils).

shuf inputfile > outfile

For example:

$ seq 10 | shuf 
7
5
8
3
9
4
10
1
6
2

Upvotes: 6

Related Questions