GNU/Linux >> Linux Esercitazione >  >> Linux

Script Bash:come assegnare ogni riga di output di comando ai valori in un array?

Quando eseguo un comando, ottengo 10 righe di output. Voglio prendere le righe 2-4-6-8-10 e inserirle in un array.

Ogni volta che eseguo il mio comando, l'ordine cambia, quindi devo farlo in una volta sola. Avevo provato a eseguire il mio comando e selezionare la riga 2, quindi eseguire di nuovo e selezionare la riga 4 ecc., ma poiché l'ordine cambia, questo non funziona:

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}")

Risposta accettata:

Usando readarray nel bash shell e GNU sed :

readarray -t my_array < <( my_command | sed '1~2d' )

Il readarray integrato legge le righe in un array. Le righe vengono lette da una sostituzione di processo. Il sed comando nella sostituzione del processo produrrà solo ogni seconda riga letta da my_command (e potrebbe anche essere scritto sed '1!n;d' o come sed -n 'n;p' con sed standard ).

In GNU sed , l'indirizzo n~m indirizzi ogni m :esima riga che inizia alla riga n . Questa è un'estensione GNU dello standard sed , per comodità.

Il my_command il comando verrà chiamato solo una volta.

Test:

$ readarray -t my_array < <( seq 10 | sed '1~2d' )
$ printf '%s\n' "${my_array[@]}"
2
4
6
8
10

Linux
  1. Come assegnare l'output di un comando a una variabile di shell?

  2. Come aggiungere un utente Unix/linux in uno script Bash?

  3. Come passare un argomento della riga di comando in uno script di shell?

  4. Come creare una matrice di elementi unici da una stringa/array in Bash?

  5. lo script bash aggiunge il testo alla prima riga di un file

Come cancellare la cronologia della riga di comando BASH in Linux

Come visualizzare la cronologia di Bash senza numeri di riga

Come rimuovere le righe da un file usando il comando Sed

Come archiviare l'output del comando nell'array in Ansible?

Come ripulire l'output del comando 'script' di Linux

Come posso modificare le righe precedenti in un comando a più righe in Bash?