如何生成逗号分隔的随机整数列表

spu*_*ger 2 shell random numeric-data

我正在尝试生成一个逗号分隔的1 到 10 之间整数的无序列表,我尝试了以下操作,但结果是一个有序列表:

seq -s "," 10 | shuf
Run Code Online (Sandbox Code Playgroud)

row*_*oat 12

您可以使用paste -s连接线:

shuf -i1-10 | paste -sd, -
Run Code Online (Sandbox Code Playgroud)

这使用-ishuf 选项来指定一系列正整数。

的输出seq可以通过管道传输到 shuf:

seq 10 | shuf | paste -sd, -
Run Code Online (Sandbox Code Playgroud)

或者-e改组参数:

shuf -e {1..10} | paste -sd, -
Run Code Online (Sandbox Code Playgroud)


ImH*_*ere 7

1 到 10 之间的数字列表有两种。您需要哪一种?

解释它们的最好方法是使用一个类比:

  1. 将编号为 1 到 10 的 10 个球放入袋中。在每一轮中取出一个球,读取数字并且不要将球放回袋中。这会生成最多 10 个数字的列表。所有数字都将出现在列表中,但(强制)只出现一次。

    这样的列表将由类似于以下的命令生成:

    $ echo $(seq 10 | shuf) | tr " " ","
    10,7,5,2,3,9,1,4,8,6
    
    $ shuf -i1-10 | paste -sd, -
    1,9,4,6,2,8,10,5,3,7
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将编号为 1 到 10 的 10 个球放入袋中。每次从袋子中取出一个球,读取上面的数字,然后将球放回袋子中。列表可能是无限的,数字可能需要一段时间才能重复。

    可以使用类似于以下命令的命令生成这样的列表:

    $ shuf -n 20 -r -i1-10 | paste -sd, -
    9,9,7,8,2,8,5,5,4,9,8,6,6,6,4,10,6,6,9,7
    
    Run Code Online (Sandbox Code Playgroud)


ilk*_*chu 6

shufshuffle lines,如果你只给它一行,那么可能的结果并不多。相反,给它行,然后将换行符更改为逗号:

$ seq 10 | shuf | tr '\n' ',' | sed '$s/,$/\n/'
1,7,8,2,9,4,6,3,5,10
Run Code Online (Sandbox Code Playgroud)

(最后一个sed将最后一个逗号更改为换行符。可能有更好的方法。就像paste@rowboat 的答案中使用as一样)