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.
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.