ksh: So speichern Sie die Ausgabe eines awk-Befehls in einem Array

ksh: So speichern Sie die Ausgabe eines awk-Befehls in einem Array

Ich habe folgenden awkBefehl:

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

Die Ausgabe ist wie folgt:

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

doc=4000000000).


information:
0
5898
5898
06:06:25

Das Problem ist, dass ich dies in einem Array speichern muss. Wenn ich beispielsweise drucke oder echoe$array[0]

Ich sollte bekommen06:00:00

und ebenso

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

Mein Endziel ist, sie mit einer Druckanweisung auszudrucken, d. h.

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

Ausgabe

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

Antwort1

Das hier sollte genügen:

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

Angesichts des Kommentars von @Stephane ein anderer Ansatz:

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

funktioniert auf meinem KSH "93u+"

Antwort2

Es sieht so aus, als ob Sie nur den Wert des letzten Felds des ersten und letzten Datensatzes benötigen.

Dies geht am besten awkallein:

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

Verwenden Sie ein Array, das nach NR(Datensatznummer/Zeilennummer) indiziert ist, awkwenn Sie nach dem Zufallsprinzip auf die Felder zugreifen möchten:

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

verwandte Informationen