ksh: para almacenar la salida de un comando awk en una matriz

ksh: para almacenar la salida de un comando awk en una matriz

Tengo el siguiente awkcomando:

awk -F ' ' '{ print $NF }' log filename

Y da el resultado de la siguiente manera:

06:00:00
parameters:
SDS
(2)
no
no
no
no

doc=4000000000).


information:
0
5898
5898
06:06:25

El problema es que necesito guardar esto en una matriz. Por ejemplo cuando imprimo o hago eco$array[0]

debería conseguir06:00:00

y de manera similar

$array[1] = parameters:
.
.
.
$array[n] = 06:06:25

Mi objetivo final es imprimirlos usando una declaración impresa, es decir

printf("start time: %d  and end time: %d", array[0], array[n]")

Producción

start time:06:00:00 and end time:06:06:25

Respuesta1

Esto debería hacerlo:

array=( $(awk -F ' ' '{ print $NF }' log filename) )

Dado el comentario de @Stephane, otro enfoque:

array=()
awk -F ' ' '{ print $NF }' log filename | while IFS= read -r line; do
    array+=( "$line" )
done
echo ${#array[@]}
echo ${array[1]}
echo ${array[17]}
17
06:00:00
06:06:25

funciona en mi ksh "93u+"

Respuesta2

Parece que solo necesitas el valor del último campo del primer y último registro.

Es mejor hacerlo por awksí solo:

nawk 'NR == 1 {start=$NF}
    {last=$NF}
    END { 
         printf("start time: %s  and end time: %s", start, last)
    }' log filename
start time: 06:00:00  and end time: 06:06:25

Utilice una matriz indexada por NR(número de registro/número de línea) awksi desea acceder a los campos de forma aleatoria:

nawk '{
    last[NR]=$(NF)
} END {
    print last[1],last[NR-1]
}' log
06:00:00 5898

información relacionada