Saat menjalankan perintah, saya mendapatkan 10 baris output. Saya ingin mengambil baris 2-4-6-8-10 dan memasukkannya ke dalam array.
Setiap kali saya menjalankan perintah saya, urutannya berubah jadi saya harus melakukan ini sekaligus. Saya telah mencoba menjalankan perintah saya dan memilih baris 2, lalu menjalankan lagi dan memilih baris 4 dll., tetapi karena urutannya berubah, ini tidak berhasil:
value1=$(my_command |sed '2q;d')
value2=$(my_command |sed '4q;d')
value3=$(my_command |sed '6q;d')
value4=$(my_command |sed '8q;d')
value5=$(my_command |sed '10q;d')
MY_ARRAY=("${value1}" "${value2}" "${value3}" "${value4}" "${value5}")
Jawaban yang Diterima:
Menggunakan readarray
di bash
shell, dan GNU sed
:
readarray -t my_array < <( my_command | sed '1~2d' )
readarray
. bawaan membaca baris ke dalam array. Garis dibaca dari proses substitusi. sed
perintah dalam proses substitusi hanya akan menampilkan setiap baris kedua yang dibaca dari my_command
(dan bisa juga ditulis sed '1!n;d'
, atau sebagai sed -n 'n;p'
dengan standar sed
).
Di GNU sed
, alamat n~m
alamat setiap m
:baris ke-th dimulai dari baris n
. Ini adalah ekstensi GNU untuk standar sed
, untuk kenyamanan.
my_command
perintah hanya akan dipanggil sekali.
Pengujian:
$ readarray -t my_array < <( seq 10 | sed '1~2d' )
$ printf '%s\n' "${my_array[@]}"
2
4
6
8
10