How to randomize the output from seq? The Next CEO of Stack OverflowBash - print lines of textfile in random orderGenerate random numbers in specific rangeSort the output of find before piping to opensshHow to display numbers in reverse order using seq(1)?Can I set defaults for rsync in non daemon mode?How to randomly sample a subset of a fileAwk/grep/sed get comma separated list of numbers from lines of textCan I use seq to go from 001 to 999?mkdir with seq command problemHow to avoid printing a newline when seq completes?Use chmod command selectivelyseq decimal separator
How to start emacs in "nothing" mode (`fundamental-mode`)
How to avoid supervisors with prejudiced views?
Is there an analogue of projective spaces for proper schemes?
Why do professional authors make "consistency" mistakes? And how to avoid them?
If/When UK leaves the EU, can a future goverment conduct a referendum to join the EU?
WOW air has ceased operation, can I get my tickets refunded?
Non-deterministic sum of floats
Several mode to write the symbol of a vector
Indicator light circuit
Contours of a clandestine nature
Is there a difference between "Fahrstuhl" and "Aufzug"
Is micro rebar a better way to reinforce concrete than rebar?
Rotate a column
Is it my responsibility to learn a new technology in my own time my employer wants to implement?
What is "(CFMCC)" on an ILS approach chart?
Is there a way to save my career from absolute disaster?
How did people program for Consoles with multiple CPUs?
Can you replace a racial trait cantrip when leveling up?
If the heap is initialized for security, then why is the stack uninitialized?
MessageLevel in QGIS3
Complex fractions
If a black hole is created from light, can this black hole then move at speed of light?
What flight has the highest ratio of time difference to flight time?
Is "for causing autism in X" grammatical?
How to randomize the output from seq?
The Next CEO of Stack OverflowBash - print lines of textfile in random orderGenerate random numbers in specific rangeSort the output of find before piping to opensshHow to display numbers in reverse order using seq(1)?Can I set defaults for rsync in non daemon mode?How to randomly sample a subset of a fileAwk/grep/sed get comma separated list of numbers from lines of textCan I use seq to go from 001 to 999?mkdir with seq command problemHow to avoid printing a newline when seq completes?Use chmod command selectivelyseq decimal separator
I know I can use seq
to generate a random list of numbers: 1, 2, 3, 4...
I want to get those numbers into a random order like 3, 1, 4, 2...
I know I can use shuf
to shuffle the lines of a file. So I could use seq
to write random numbers to a file and then use shuf
to shuffle them -- or write some sort of shuffle function. But this seems needlessly complex. Is there a simpler way to randomize the items in an array with a single command?
command-line seq
add a comment |
I know I can use seq
to generate a random list of numbers: 1, 2, 3, 4...
I want to get those numbers into a random order like 3, 1, 4, 2...
I know I can use shuf
to shuffle the lines of a file. So I could use seq
to write random numbers to a file and then use shuf
to shuffle them -- or write some sort of shuffle function. But this seems needlessly complex. Is there a simpler way to randomize the items in an array with a single command?
command-line seq
add a comment |
I know I can use seq
to generate a random list of numbers: 1, 2, 3, 4...
I want to get those numbers into a random order like 3, 1, 4, 2...
I know I can use shuf
to shuffle the lines of a file. So I could use seq
to write random numbers to a file and then use shuf
to shuffle them -- or write some sort of shuffle function. But this seems needlessly complex. Is there a simpler way to randomize the items in an array with a single command?
command-line seq
I know I can use seq
to generate a random list of numbers: 1, 2, 3, 4...
I want to get those numbers into a random order like 3, 1, 4, 2...
I know I can use shuf
to shuffle the lines of a file. So I could use seq
to write random numbers to a file and then use shuf
to shuffle them -- or write some sort of shuffle function. But this seems needlessly complex. Is there a simpler way to randomize the items in an array with a single command?
command-line seq
command-line seq
edited Oct 24 '15 at 12:50
don_crissti
51.7k15141168
51.7k15141168
asked Apr 13 '14 at 2:55
bernie2436bernie2436
2,118154057
2,118154057
add a comment |
add a comment |
5 Answers
5
active
oldest
votes
You can just pipe the output to shuf
.
$ seq 100 | shuf
Example
$ seq 10 | shuf
2
6
4
8
1
3
10
7
9
5
If you want the output to be horizontal then pipe it to paste
.
$ seq 10 | shuf | paste - -s -d ' '
1 6 9 3 8 4 10 7 2 5
$ seq 10 | shuf | paste - -s -d ' '
7 4 6 1 8 3 10 5 9 2
$ seq 10 | shuf | paste - -s -d ' '
9 8 3 6 1 2 10 4 7 5
Want it with commas in between? Change the delimiter to paste
:
$ seq 10 | shuf | paste - -s -d ','
2,4,9,1,8,7,3,5,10,6
But you've gotta format somehow to get 'em on one line with commas.echo $(seq 10 | shuf)
comes close but doesn't do the commas.
– mikeserv
Apr 13 '14 at 3:35
It's horizontal beforepaste
...
– mikeserv
Apr 13 '14 at 3:46
@mikeserv - changed it around.
– slm♦
Apr 13 '14 at 3:46
Yeah. There you go. I didnt knowpaste
did that. Thanks for teaching me. Have an upvote.
– mikeserv
Apr 13 '14 at 3:47
@mikeserv - yeah read through the site looking at either mine, Stephane's or Gilles A's usingjoin
andpaste
. Those 2 tools are extremely powerful.
– slm♦
Apr 13 '14 at 3:48
|
show 6 more comments
Is there a simpler way to randomize the items in an array with a
single command?
Assuming you have an array of decimal integers:
arr=(4 8 14 18 24 29 32 37 42)
You could use printf
and shuf
to randomize the elements of the array:
$ arr=($(printf "%dn" "$arr[@]" | shuf))
$ echo "$arr[@]"
4 37 32 14 24 8 29 42 18
(the above assumes you've not modified $IFS
).
If all that you need is random numbers between two integers, say 10
and 20
, you do not need any extra processes other than shuf
by using the -i
option:
$ shuf -i 10-20
12
10
20
14
16
19
13
11
18
17
15
Quoting from man shuf
:
-i, --input-range=LO-HI
treat each number LO through HI as an input line
Shucks. I saw that too inshuf --help
but i tried to useshuf -i 1 10
without the intervening-dash.
oh well, good work - have my upvote.
– mikeserv
Apr 13 '14 at 5:17
add a comment |
printf '%s, ' `seq 1 10 | shuf`
You don't even need a for
loop.
OUTPUT
7, 3, 4, 10, 2, 9, 1, 8, 5, 6,
To get them in a shell array you do:
( set -- $(seq 1 10 | shuf) ; printf '%s, ' "$@" )
OUTPUT
5, 9, 7, 2, 4, 3, 6, 1, 10, 8,
And then they're in your shell array.
If you get them in the shell array, you don't even need printf
:
( set -- $(seq 1 10 | shuf); IFS=, ; echo "$*" )
OUTPUT
9,4,10,3,1,2,7,5,6,8
By the way, seq
and printf
are kinda made for each other. For instance if I want to repeat a string 1000 times?
printf 'a stringn%.0b' `seq 1 1000`
OUTPUT
a string
... 999 a string
lines later...
a string
Or...
printf 'a string,%.0b' `seq 1 10`
OUTPUT
a string,a string,a string,a string,a string,a string,a string,a string,a string,a string,
I want to execute a command 39 times?
printf 'echo "run %d"n' `seq 1 39` | . /dev/stdin
OUTPUT
run 1
... 38 run
lines later ...
run 39
add a comment |
You may use shuf
command to randomize output, e.g
%> for x in $(seq 1 10 | shuf); do echo -n "$x "; done; echo
4 10 8 7 1 6 3 5 2 9
add a comment |
POSIXly, to generate a shuffled list of the decimal integers from min
to max
:
awk -v min=1 -v max=10 'BEGIN
for (i = min; i <= max; i++) a[i] = i
srand()
for (i = min; i <= max; i++)
j = int(rand() * (max - min + 1)) + min
tmp = a[i]; a[i] = a[j]; a[j] = tmp
for (i = min; i <= max; i++) print a[i]
'
Beware that with many awk implementations, running that command twice within the same second will produce the same result (as srand()
seeds the pseudo-random generator based on the current time).
add a comment |
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "106"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f124478%2fhow-to-randomize-the-output-from-seq%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
5 Answers
5
active
oldest
votes
5 Answers
5
active
oldest
votes
active
oldest
votes
active
oldest
votes
You can just pipe the output to shuf
.
$ seq 100 | shuf
Example
$ seq 10 | shuf
2
6
4
8
1
3
10
7
9
5
If you want the output to be horizontal then pipe it to paste
.
$ seq 10 | shuf | paste - -s -d ' '
1 6 9 3 8 4 10 7 2 5
$ seq 10 | shuf | paste - -s -d ' '
7 4 6 1 8 3 10 5 9 2
$ seq 10 | shuf | paste - -s -d ' '
9 8 3 6 1 2 10 4 7 5
Want it with commas in between? Change the delimiter to paste
:
$ seq 10 | shuf | paste - -s -d ','
2,4,9,1,8,7,3,5,10,6
But you've gotta format somehow to get 'em on one line with commas.echo $(seq 10 | shuf)
comes close but doesn't do the commas.
– mikeserv
Apr 13 '14 at 3:35
It's horizontal beforepaste
...
– mikeserv
Apr 13 '14 at 3:46
@mikeserv - changed it around.
– slm♦
Apr 13 '14 at 3:46
Yeah. There you go. I didnt knowpaste
did that. Thanks for teaching me. Have an upvote.
– mikeserv
Apr 13 '14 at 3:47
@mikeserv - yeah read through the site looking at either mine, Stephane's or Gilles A's usingjoin
andpaste
. Those 2 tools are extremely powerful.
– slm♦
Apr 13 '14 at 3:48
|
show 6 more comments
You can just pipe the output to shuf
.
$ seq 100 | shuf
Example
$ seq 10 | shuf
2
6
4
8
1
3
10
7
9
5
If you want the output to be horizontal then pipe it to paste
.
$ seq 10 | shuf | paste - -s -d ' '
1 6 9 3 8 4 10 7 2 5
$ seq 10 | shuf | paste - -s -d ' '
7 4 6 1 8 3 10 5 9 2
$ seq 10 | shuf | paste - -s -d ' '
9 8 3 6 1 2 10 4 7 5
Want it with commas in between? Change the delimiter to paste
:
$ seq 10 | shuf | paste - -s -d ','
2,4,9,1,8,7,3,5,10,6
But you've gotta format somehow to get 'em on one line with commas.echo $(seq 10 | shuf)
comes close but doesn't do the commas.
– mikeserv
Apr 13 '14 at 3:35
It's horizontal beforepaste
...
– mikeserv
Apr 13 '14 at 3:46
@mikeserv - changed it around.
– slm♦
Apr 13 '14 at 3:46
Yeah. There you go. I didnt knowpaste
did that. Thanks for teaching me. Have an upvote.
– mikeserv
Apr 13 '14 at 3:47
@mikeserv - yeah read through the site looking at either mine, Stephane's or Gilles A's usingjoin
andpaste
. Those 2 tools are extremely powerful.
– slm♦
Apr 13 '14 at 3:48
|
show 6 more comments
You can just pipe the output to shuf
.
$ seq 100 | shuf
Example
$ seq 10 | shuf
2
6
4
8
1
3
10
7
9
5
If you want the output to be horizontal then pipe it to paste
.
$ seq 10 | shuf | paste - -s -d ' '
1 6 9 3 8 4 10 7 2 5
$ seq 10 | shuf | paste - -s -d ' '
7 4 6 1 8 3 10 5 9 2
$ seq 10 | shuf | paste - -s -d ' '
9 8 3 6 1 2 10 4 7 5
Want it with commas in between? Change the delimiter to paste
:
$ seq 10 | shuf | paste - -s -d ','
2,4,9,1,8,7,3,5,10,6
You can just pipe the output to shuf
.
$ seq 100 | shuf
Example
$ seq 10 | shuf
2
6
4
8
1
3
10
7
9
5
If you want the output to be horizontal then pipe it to paste
.
$ seq 10 | shuf | paste - -s -d ' '
1 6 9 3 8 4 10 7 2 5
$ seq 10 | shuf | paste - -s -d ' '
7 4 6 1 8 3 10 5 9 2
$ seq 10 | shuf | paste - -s -d ' '
9 8 3 6 1 2 10 4 7 5
Want it with commas in between? Change the delimiter to paste
:
$ seq 10 | shuf | paste - -s -d ','
2,4,9,1,8,7,3,5,10,6
edited Apr 13 '14 at 3:46
answered Apr 13 '14 at 3:32
slm♦slm
255k71539687
255k71539687
But you've gotta format somehow to get 'em on one line with commas.echo $(seq 10 | shuf)
comes close but doesn't do the commas.
– mikeserv
Apr 13 '14 at 3:35
It's horizontal beforepaste
...
– mikeserv
Apr 13 '14 at 3:46
@mikeserv - changed it around.
– slm♦
Apr 13 '14 at 3:46
Yeah. There you go. I didnt knowpaste
did that. Thanks for teaching me. Have an upvote.
– mikeserv
Apr 13 '14 at 3:47
@mikeserv - yeah read through the site looking at either mine, Stephane's or Gilles A's usingjoin
andpaste
. Those 2 tools are extremely powerful.
– slm♦
Apr 13 '14 at 3:48
|
show 6 more comments
But you've gotta format somehow to get 'em on one line with commas.echo $(seq 10 | shuf)
comes close but doesn't do the commas.
– mikeserv
Apr 13 '14 at 3:35
It's horizontal beforepaste
...
– mikeserv
Apr 13 '14 at 3:46
@mikeserv - changed it around.
– slm♦
Apr 13 '14 at 3:46
Yeah. There you go. I didnt knowpaste
did that. Thanks for teaching me. Have an upvote.
– mikeserv
Apr 13 '14 at 3:47
@mikeserv - yeah read through the site looking at either mine, Stephane's or Gilles A's usingjoin
andpaste
. Those 2 tools are extremely powerful.
– slm♦
Apr 13 '14 at 3:48
But you've gotta format somehow to get 'em on one line with commas.
echo $(seq 10 | shuf)
comes close but doesn't do the commas.– mikeserv
Apr 13 '14 at 3:35
But you've gotta format somehow to get 'em on one line with commas.
echo $(seq 10 | shuf)
comes close but doesn't do the commas.– mikeserv
Apr 13 '14 at 3:35
It's horizontal before
paste
...– mikeserv
Apr 13 '14 at 3:46
It's horizontal before
paste
...– mikeserv
Apr 13 '14 at 3:46
@mikeserv - changed it around.
– slm♦
Apr 13 '14 at 3:46
@mikeserv - changed it around.
– slm♦
Apr 13 '14 at 3:46
Yeah. There you go. I didnt know
paste
did that. Thanks for teaching me. Have an upvote.– mikeserv
Apr 13 '14 at 3:47
Yeah. There you go. I didnt know
paste
did that. Thanks for teaching me. Have an upvote.– mikeserv
Apr 13 '14 at 3:47
@mikeserv - yeah read through the site looking at either mine, Stephane's or Gilles A's using
join
and paste
. Those 2 tools are extremely powerful.– slm♦
Apr 13 '14 at 3:48
@mikeserv - yeah read through the site looking at either mine, Stephane's or Gilles A's using
join
and paste
. Those 2 tools are extremely powerful.– slm♦
Apr 13 '14 at 3:48
|
show 6 more comments
Is there a simpler way to randomize the items in an array with a
single command?
Assuming you have an array of decimal integers:
arr=(4 8 14 18 24 29 32 37 42)
You could use printf
and shuf
to randomize the elements of the array:
$ arr=($(printf "%dn" "$arr[@]" | shuf))
$ echo "$arr[@]"
4 37 32 14 24 8 29 42 18
(the above assumes you've not modified $IFS
).
If all that you need is random numbers between two integers, say 10
and 20
, you do not need any extra processes other than shuf
by using the -i
option:
$ shuf -i 10-20
12
10
20
14
16
19
13
11
18
17
15
Quoting from man shuf
:
-i, --input-range=LO-HI
treat each number LO through HI as an input line
Shucks. I saw that too inshuf --help
but i tried to useshuf -i 1 10
without the intervening-dash.
oh well, good work - have my upvote.
– mikeserv
Apr 13 '14 at 5:17
add a comment |
Is there a simpler way to randomize the items in an array with a
single command?
Assuming you have an array of decimal integers:
arr=(4 8 14 18 24 29 32 37 42)
You could use printf
and shuf
to randomize the elements of the array:
$ arr=($(printf "%dn" "$arr[@]" | shuf))
$ echo "$arr[@]"
4 37 32 14 24 8 29 42 18
(the above assumes you've not modified $IFS
).
If all that you need is random numbers between two integers, say 10
and 20
, you do not need any extra processes other than shuf
by using the -i
option:
$ shuf -i 10-20
12
10
20
14
16
19
13
11
18
17
15
Quoting from man shuf
:
-i, --input-range=LO-HI
treat each number LO through HI as an input line
Shucks. I saw that too inshuf --help
but i tried to useshuf -i 1 10
without the intervening-dash.
oh well, good work - have my upvote.
– mikeserv
Apr 13 '14 at 5:17
add a comment |
Is there a simpler way to randomize the items in an array with a
single command?
Assuming you have an array of decimal integers:
arr=(4 8 14 18 24 29 32 37 42)
You could use printf
and shuf
to randomize the elements of the array:
$ arr=($(printf "%dn" "$arr[@]" | shuf))
$ echo "$arr[@]"
4 37 32 14 24 8 29 42 18
(the above assumes you've not modified $IFS
).
If all that you need is random numbers between two integers, say 10
and 20
, you do not need any extra processes other than shuf
by using the -i
option:
$ shuf -i 10-20
12
10
20
14
16
19
13
11
18
17
15
Quoting from man shuf
:
-i, --input-range=LO-HI
treat each number LO through HI as an input line
Is there a simpler way to randomize the items in an array with a
single command?
Assuming you have an array of decimal integers:
arr=(4 8 14 18 24 29 32 37 42)
You could use printf
and shuf
to randomize the elements of the array:
$ arr=($(printf "%dn" "$arr[@]" | shuf))
$ echo "$arr[@]"
4 37 32 14 24 8 29 42 18
(the above assumes you've not modified $IFS
).
If all that you need is random numbers between two integers, say 10
and 20
, you do not need any extra processes other than shuf
by using the -i
option:
$ shuf -i 10-20
12
10
20
14
16
19
13
11
18
17
15
Quoting from man shuf
:
-i, --input-range=LO-HI
treat each number LO through HI as an input line
edited Feb 3 '16 at 10:16
Stéphane Chazelas
312k57589946
312k57589946
answered Apr 13 '14 at 4:12
devnulldevnull
8,71112942
8,71112942
Shucks. I saw that too inshuf --help
but i tried to useshuf -i 1 10
without the intervening-dash.
oh well, good work - have my upvote.
– mikeserv
Apr 13 '14 at 5:17
add a comment |
Shucks. I saw that too inshuf --help
but i tried to useshuf -i 1 10
without the intervening-dash.
oh well, good work - have my upvote.
– mikeserv
Apr 13 '14 at 5:17
Shucks. I saw that too in
shuf --help
but i tried to use shuf -i 1 10
without the intervening -dash.
oh well, good work - have my upvote.– mikeserv
Apr 13 '14 at 5:17
Shucks. I saw that too in
shuf --help
but i tried to use shuf -i 1 10
without the intervening -dash.
oh well, good work - have my upvote.– mikeserv
Apr 13 '14 at 5:17
add a comment |
printf '%s, ' `seq 1 10 | shuf`
You don't even need a for
loop.
OUTPUT
7, 3, 4, 10, 2, 9, 1, 8, 5, 6,
To get them in a shell array you do:
( set -- $(seq 1 10 | shuf) ; printf '%s, ' "$@" )
OUTPUT
5, 9, 7, 2, 4, 3, 6, 1, 10, 8,
And then they're in your shell array.
If you get them in the shell array, you don't even need printf
:
( set -- $(seq 1 10 | shuf); IFS=, ; echo "$*" )
OUTPUT
9,4,10,3,1,2,7,5,6,8
By the way, seq
and printf
are kinda made for each other. For instance if I want to repeat a string 1000 times?
printf 'a stringn%.0b' `seq 1 1000`
OUTPUT
a string
... 999 a string
lines later...
a string
Or...
printf 'a string,%.0b' `seq 1 10`
OUTPUT
a string,a string,a string,a string,a string,a string,a string,a string,a string,a string,
I want to execute a command 39 times?
printf 'echo "run %d"n' `seq 1 39` | . /dev/stdin
OUTPUT
run 1
... 38 run
lines later ...
run 39
add a comment |
printf '%s, ' `seq 1 10 | shuf`
You don't even need a for
loop.
OUTPUT
7, 3, 4, 10, 2, 9, 1, 8, 5, 6,
To get them in a shell array you do:
( set -- $(seq 1 10 | shuf) ; printf '%s, ' "$@" )
OUTPUT
5, 9, 7, 2, 4, 3, 6, 1, 10, 8,
And then they're in your shell array.
If you get them in the shell array, you don't even need printf
:
( set -- $(seq 1 10 | shuf); IFS=, ; echo "$*" )
OUTPUT
9,4,10,3,1,2,7,5,6,8
By the way, seq
and printf
are kinda made for each other. For instance if I want to repeat a string 1000 times?
printf 'a stringn%.0b' `seq 1 1000`
OUTPUT
a string
... 999 a string
lines later...
a string
Or...
printf 'a string,%.0b' `seq 1 10`
OUTPUT
a string,a string,a string,a string,a string,a string,a string,a string,a string,a string,
I want to execute a command 39 times?
printf 'echo "run %d"n' `seq 1 39` | . /dev/stdin
OUTPUT
run 1
... 38 run
lines later ...
run 39
add a comment |
printf '%s, ' `seq 1 10 | shuf`
You don't even need a for
loop.
OUTPUT
7, 3, 4, 10, 2, 9, 1, 8, 5, 6,
To get them in a shell array you do:
( set -- $(seq 1 10 | shuf) ; printf '%s, ' "$@" )
OUTPUT
5, 9, 7, 2, 4, 3, 6, 1, 10, 8,
And then they're in your shell array.
If you get them in the shell array, you don't even need printf
:
( set -- $(seq 1 10 | shuf); IFS=, ; echo "$*" )
OUTPUT
9,4,10,3,1,2,7,5,6,8
By the way, seq
and printf
are kinda made for each other. For instance if I want to repeat a string 1000 times?
printf 'a stringn%.0b' `seq 1 1000`
OUTPUT
a string
... 999 a string
lines later...
a string
Or...
printf 'a string,%.0b' `seq 1 10`
OUTPUT
a string,a string,a string,a string,a string,a string,a string,a string,a string,a string,
I want to execute a command 39 times?
printf 'echo "run %d"n' `seq 1 39` | . /dev/stdin
OUTPUT
run 1
... 38 run
lines later ...
run 39
printf '%s, ' `seq 1 10 | shuf`
You don't even need a for
loop.
OUTPUT
7, 3, 4, 10, 2, 9, 1, 8, 5, 6,
To get them in a shell array you do:
( set -- $(seq 1 10 | shuf) ; printf '%s, ' "$@" )
OUTPUT
5, 9, 7, 2, 4, 3, 6, 1, 10, 8,
And then they're in your shell array.
If you get them in the shell array, you don't even need printf
:
( set -- $(seq 1 10 | shuf); IFS=, ; echo "$*" )
OUTPUT
9,4,10,3,1,2,7,5,6,8
By the way, seq
and printf
are kinda made for each other. For instance if I want to repeat a string 1000 times?
printf 'a stringn%.0b' `seq 1 1000`
OUTPUT
a string
... 999 a string
lines later...
a string
Or...
printf 'a string,%.0b' `seq 1 10`
OUTPUT
a string,a string,a string,a string,a string,a string,a string,a string,a string,a string,
I want to execute a command 39 times?
printf 'echo "run %d"n' `seq 1 39` | . /dev/stdin
OUTPUT
run 1
... 38 run
lines later ...
run 39
edited Apr 13 '14 at 4:23
answered Apr 13 '14 at 3:15
mikeservmikeserv
46k669162
46k669162
add a comment |
add a comment |
You may use shuf
command to randomize output, e.g
%> for x in $(seq 1 10 | shuf); do echo -n "$x "; done; echo
4 10 8 7 1 6 3 5 2 9
add a comment |
You may use shuf
command to randomize output, e.g
%> for x in $(seq 1 10 | shuf); do echo -n "$x "; done; echo
4 10 8 7 1 6 3 5 2 9
add a comment |
You may use shuf
command to randomize output, e.g
%> for x in $(seq 1 10 | shuf); do echo -n "$x "; done; echo
4 10 8 7 1 6 3 5 2 9
You may use shuf
command to randomize output, e.g
%> for x in $(seq 1 10 | shuf); do echo -n "$x "; done; echo
4 10 8 7 1 6 3 5 2 9
answered Apr 13 '14 at 3:10
daisydaisy
29.2k50173305
29.2k50173305
add a comment |
add a comment |
POSIXly, to generate a shuffled list of the decimal integers from min
to max
:
awk -v min=1 -v max=10 'BEGIN
for (i = min; i <= max; i++) a[i] = i
srand()
for (i = min; i <= max; i++)
j = int(rand() * (max - min + 1)) + min
tmp = a[i]; a[i] = a[j]; a[j] = tmp
for (i = min; i <= max; i++) print a[i]
'
Beware that with many awk implementations, running that command twice within the same second will produce the same result (as srand()
seeds the pseudo-random generator based on the current time).
add a comment |
POSIXly, to generate a shuffled list of the decimal integers from min
to max
:
awk -v min=1 -v max=10 'BEGIN
for (i = min; i <= max; i++) a[i] = i
srand()
for (i = min; i <= max; i++)
j = int(rand() * (max - min + 1)) + min
tmp = a[i]; a[i] = a[j]; a[j] = tmp
for (i = min; i <= max; i++) print a[i]
'
Beware that with many awk implementations, running that command twice within the same second will produce the same result (as srand()
seeds the pseudo-random generator based on the current time).
add a comment |
POSIXly, to generate a shuffled list of the decimal integers from min
to max
:
awk -v min=1 -v max=10 'BEGIN
for (i = min; i <= max; i++) a[i] = i
srand()
for (i = min; i <= max; i++)
j = int(rand() * (max - min + 1)) + min
tmp = a[i]; a[i] = a[j]; a[j] = tmp
for (i = min; i <= max; i++) print a[i]
'
Beware that with many awk implementations, running that command twice within the same second will produce the same result (as srand()
seeds the pseudo-random generator based on the current time).
POSIXly, to generate a shuffled list of the decimal integers from min
to max
:
awk -v min=1 -v max=10 'BEGIN
for (i = min; i <= max; i++) a[i] = i
srand()
for (i = min; i <= max; i++)
j = int(rand() * (max - min + 1)) + min
tmp = a[i]; a[i] = a[j]; a[j] = tmp
for (i = min; i <= max; i++) print a[i]
'
Beware that with many awk implementations, running that command twice within the same second will produce the same result (as srand()
seeds the pseudo-random generator based on the current time).
edited Feb 3 '16 at 10:17
answered Feb 3 '16 at 10:10
Stéphane ChazelasStéphane Chazelas
312k57589946
312k57589946
add a comment |
add a comment |
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f124478%2fhow-to-randomize-the-output-from-seq%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown