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 la segunda (o subsiguiente) línea en Korn Shell.

Mi sistema operativo es AIX (7200-05-03-2136) y mi versión de Korn Shell es ksh88 (Versión M-11/16/88f), pero creo que mi pregunta no depende de las versiones.

Considere una salida de comando de una sola línea. Puedo poner esto fácilmente en una variable a través de “read”:

command | read variable

Ahora, suponga que el comando tendría una salida de dos líneas. ¿Hay alguna manera de capturar solo la segunda línea en una variable? Sería fácil usar algún programa externo como, por ejemplo:

command | sed '1d' | read variable

Pero me gustaría evitar eso y encontrar una solución pura de shell. He intentado las siguientes variaciones:

command | { read -r junk ; read -r variable }
command | { IFS=\n read junk ; read variable }
command | IFS='\n' read junk variable

Pero todas estas no funcionarán.

Tags:  

Answer

  1. Avatar for davy.ai

    Como experto en informática especializado en ksh, entiendo que está buscando una solución de shell puro para capturar solo la segunda línea de una salida de dos líneas en una variable. Aunque ha intentado varias variaciones, ninguna de ellas funciona.

    Una forma de lograr esto es mediante el comando “mapfile”, también conocido como “readarray” en bash. Aquí hay un ejemplo:

    `command | mapfile -s 1 -n 1 variable `

    En este ejemplo, “mapfile” lee una línea de salida de “command” a partir del desplazamiento 1 (es decir, saltando la primera línea) y la almacena en la matriz “variable”. Como la salida es solo una línea, la matriz tendrá solo un elemento, que se puede acceder utilizando “$ {variable [0]}”.

    Alternativamente, puede usar un bucle para leer y descartar la primera línea de salida, y luego leer la segunda línea en la variable:

    `
    command | while read -r junk; do
    read -r variable
    break
    done
    `

    En este ejemplo, se lee y descarta la primera línea de salida en el bucle, y luego se lee y almacena la segunda línea en “variable”. La instrucción “break” se utiliza para salir del bucle después de leer la segunda línea.

    Ambos métodos deberían brindarle una solución de shell puro para capturar solo la segunda línea de una salida de dos líneas en una variable en ksh.

Comments are closed.