쉼표로 구분된 임의의 정수 목록을 생성하는 방법

쉼표로 구분된 임의의 정수 목록을 생성하는 방법

쉼표로 구분하여 생성하려고 합니다.무질서한1에서 10 사이의 정수 목록에서 다음을 시도했지만 결과는 순서가 지정된 목록입니다.

seq -s "," 10 | shuf

답변1

paste -s연결 와이어를 사용할 수 있습니다 .

shuf -i1-10 | paste -sd, -

-ishuf 옵션을 사용하여 양의 정수 범위를 지정합니다.

출력은 seqshuf로 파이프될 수 있습니다.

seq 10 | shuf | paste -sd, -

또는 -e매개변수를 뒤섞습니다.

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

답변2

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
    
  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
    

답변3

shuf행 순서를 섞고 한 행만 제공하면 가능한 결과가 많지 않습니다. 대신에 줄을 입력하고 개행 문자를 쉼표로 변경하세요.

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

(마지막 것은 sed마지막 쉼표를 개행 문자로 바꿉니다. 아마도 더 좋은 방법이 있을 것입니다 paste.@rowboat의 답변)

관련 정보