ksh: Para armazenar a saída de um comando awk em um array

1

Eu tenho o seguinte comando awk :

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

E dá a saída como abaixo:

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

doc=4000000000).


information:
0
5898
5898
06:06:25

O problema é que preciso salvar isso em uma matriz. Por exemplo, quando imprimo ou echo $array[0]

Eu deveria receber 06:00:00

e semelhantemente

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

Meu objetivo final é imprimi-los usando uma declaração de impressão, ou seja,

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

Saída

start time:06:00:00 and end time:06:06:25
    
por Ram 08.10.2013 / 18:17

2 respostas

2

Isso deve ser feito:

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

Dado o comentário de Stephane, outra abordagem:

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 no meu ksh "93u +"

    
por 08.10.2013 / 18:30
0

Parece que você precisa do valor do último campo do primeiro e último registro.

Isso é feito da melhor maneira em awk :

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

Use uma matriz indexada por NR (número de registro / número de linha) em awk se você quiser acessar os campos aleatoriamente:

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

Tags