GNU/Linux >> Belajar Linux >  >> Linux

Bash Script:Bagaimana Menetapkan Setiap Baris Perintah Output Ke Nilai Dalam Array?

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

Linux
  1. Bagaimana Cara Menetapkan Output Perintah Ke Variabel Shell?

  2. Bagaimana Menambahkan Pengguna Unix/linux Dalam Skrip Bash?

  3. Lewati Argumen Baris Perintah ke Skrip Bash?

  1. Bagaimana Mengurai Setiap Baris File Teks Sebagai Argumen Untuk Perintah?

  2. Bagaimana saya bisa mendapatkan nilai unik dari array di Bash?

  3. skrip bash menambahkan teks ke baris pertama file

  1. Cara Menetapkan Output dari Perintah Linux ke Variabel

  2. Cara membersihkan output dari perintah 'skrip' linux

  3. Perintah untuk menampilkan setiap baris maju lalu mundur