カンマ区切りの任意の整数リストを生成する方法

カンマ区切りの任意の整数リストを生成する方法

コンマで区切って生成しようとしています。無秩序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までの2つの数字のリストがあります。どちらが必要ですか?

これを説明する最良の方法は、たとえ話を使用することです。

  1. 1から10までの数字が書かれたボール10個をバッグに入れます。ラウンドごとにボールを1つずつ取り出して数字を読み、ボールをバッグに入れないでください。これにより、最大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行の順序を混ぜて1行だけを提供すると、可能な結果はあまりありません。代わりに行を入力し、改行文字をコンマに変更してください。

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

(最後はsed最後のカンマを改行文字に置き換えます。おそらくより良い方法がありますpaste@rowboatの返信)

関連情報