Saya tahu saya dapat menggunakan seq
untuk menghasilkan daftar angka acak: 1, 2, 3, 4 ...
Saya ingin mendapatkan angka-angka itu dalam urutan acak seperti 3, 1, 4, 2 ...
Saya tahu saya bisa gunakan shuf
untuk mengocok baris file. Jadi saya bisa gunakan seq
untuk menulis angka acak ke file dan kemudian gunakan shuf
untuk mengacaknya - atau menulis semacam fungsi acak. Tapi ini tampaknya tidak perlu rumit. Apakah ada cara yang lebih sederhana untuk mengacak item dalam array dengan satu perintah?
command-line
seq
bernie2436
sumber
sumber
echo $(seq 10 | shuf)
mendekati tetapi tidak melakukan koma.paste
...paste
melakukannya. Terima kasih telah mengajari saya. Dapatkan upvote.join
danpaste
. Kedua alat itu sangat kuat.Asumsikan Anda memiliki array bilangan desimal:
Anda bisa menggunakan
printf
danshuf
mengacak elemen-elemen array:(di atas mengasumsikan Anda belum dimodifikasi
$IFS
).Jika semua yang Anda butuhkan adalah angka acak antara dua bilangan bulat, katakan
10
dan20
, Anda tidak memerlukan proses tambahan selainshuf
menggunakan-i
opsi:Mengutip dari
man shuf
:sumber
shuf --help
tetapi saya mencoba menggunakanshuf -i 1 10
tanpa campur tangan-dash.
oh well, kerja bagus - ada baiknya saya.Anda bahkan tidak perlu
for
loop.KELUARAN
Untuk mendapatkannya dalam shell array yang Anda lakukan:
KELUARAN
Dan kemudian mereka ada dalam susunan shell Anda.
Jika Anda mendapatkannya di array shell, Anda bahkan tidak perlu
printf
:KELUARAN
Ngomong-ngomong,
seq
danprintf
agak dibuat untuk satu sama lain. Misalnya jika saya ingin mengulang string 1000 kali?KELUARAN
... 999
a string
baris kemudian ...Atau...
KELUARAN
Saya ingin menjalankan perintah 39 kali?
KELUARAN
... 38
run
baris kemudian ...sumber
Anda dapat menggunakan
shuf
perintah untuk mengacak output, misalnyasumber
POSIXly, untuk menghasilkan daftar bilangan bulat desimal dari shuffled
min
kemax
:Waspadalah bahwa dengan banyak implementasi awk, menjalankan perintah itu dua kali dalam detik yang sama akan menghasilkan hasil yang sama (seperti
srand()
benih generator pseudo-acak berdasarkan waktu saat ini).sumber