es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Leyendo múltiples coincidencias en matrices con Bash.

La utilidad ‘sas2ircu’ puede producir varias líneas para cada disco duro conectado al host. Un ejemplo de la salida para un solo disco se ve así:

Número de carcasa : 5
Número de ranura : 20
Dirección SAS : 5003048-0-185f-b21c
Estado : Listo (RDY)

Tengo un script de bash que ejecuta el comando sas2ircu y hace lo siguiente con la salida:

identifica un disco por la cadena RDY
lee el valor numérico de la carcasa (es decir, 5) en una matriz de nombre ‘enc’
lee el valor numérico de la ranura (es decir, 20) en otra matriz llamada ‘slot’

El código que tengo cumple su propósito, pero intento averiguar si puedo combinarlo en una sola línea y ejecutar el comando sas2ircu una vez en lugar de dos veces.

mapfile -t enc < <(/root/sas2ircu 0 display|grep -B3 RDY|awk ‘/Carcasa/{print $NF}’)
mapfile -t slot < <(/root/sas2ircu 0 display|grep -B2 RDY|awk ‘/Ranura/{print $NF}’)

He estado leyendo bastante sobre awk pero aún soy bastante novato en ello y no he encontrado nada mejor que lo que tengo. ¿Alguna sugerencia?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Puedes combinar los dos comandos en una sola línea usando awk:

    mapfile -t enc slot < <(/root/sas2ircu 0 display|awk '/Carcaza/{enc=$NF} /Ranura/{slot=$NF} /RDY/{print enc,slot}')
    

Comments are closed.