GNU/Linux >> Tutoriales Linux >  >> Linux

Bash Script:¿Cómo asignar cada línea de salida de comando a valores en una matriz?

Cuando ejecuto un comando, obtengo 10 líneas de salida. Quiero tomar las líneas 2-4-6-8-10 y ponerlas en una matriz.

Cada vez que ejecuto mi comando, el orden cambia, por lo que debo hacerlo de una sola vez. Intenté ejecutar mi comando y seleccionar la línea 2, luego ejecutarlo nuevamente y seleccionar la línea 4, etc., pero debido a que el orden cambia, esto no funciona:

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

Respuesta aceptada:

Usando readarray en el bash shell y GNU sed :

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

El readarray incorporado lee las líneas en una matriz. Las líneas se leen de una sustitución de proceso. El sed el comando en la sustitución del proceso solo generará cada segunda línea leída de my_command (y también podría escribirse sed '1!n;d' , o como sed -n 'n;p' con sed estándar ).

En GNU sed , la dirección n~m direcciones cada m :ésima línea que comienza en la línea n . Esta es una extensión GNU para sed estándar , para mayor comodidad.

El my_command el comando solo se llamará una vez.

Prueba:

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

Linux
  1. Cómo borrar el historial de línea de comandos BASH en Linux

  2. ¿Cómo pasar un argumento de línea de comando a un script de Shell?

  3. ¿Cómo crear una matriz de elementos únicos a partir de una cadena/matriz en Bash?

  4. ¿Cómo analizar cada línea de un archivo de texto como un argumento para un comando?

  5. Cómo limpiar la salida del comando 'script' de Linux

Cómo mostrar el historial de Bash sin números de línea

Cómo quitar líneas de un archivo usando el comando Sed

script bash agrega texto a la primera línea de un archivo

¿Cómo almacenar la salida del comando en una matriz en Ansible?

¿Cómo edito líneas anteriores en un comando de varias líneas en Bash?

Un comando para mostrar cada línea hacia adelante y luego hacia atrás