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

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

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

seq -s "," 10 | shuf

答案1

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

shuf -i1-10 | paste -sd, -

这使用-ishuf 选项来指定正整数范围。

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

seq 10 | shuf | paste -sd, -

或者-e打乱参数:

shuf -e {1..10} | paste -sd, -

答案2

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

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

  1. 将 10 个编号为 1 到 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
    
  2. 将 10 个编号为 1 到 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
    

答案3

shuf打乱行顺序,如果只给它一行,可能的结果并不多。相反,给它行,然后将换行符更改为逗号:

$ seq 10 | shuf | tr '\n' ',' | sed '$s/,$/\n/'
1,7,8,2,9,4,6,3,5,10

(最后一个sed将最后一个逗号更改为换行符。可能有更好的方法。就像paste@rowboat 的回答

相关内容