Tengo el siguiente awk
comando:
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 awk
sí 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) awk
si desea acceder a los campos de forma aleatoria:
nawk '{
last[NR]=$(NF)
} END {
print last[1],last[NR-1]
}' log
06:00:00 5898