ksh :將 awk 指令的輸出儲存在陣列中

ksh :將 awk 指令的輸出儲存在陣列中

我有以下awk命令:

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

它給出的輸出如下:

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

doc=4000000000).


information:
0
5898
5898
06:06:25

問題是我需要將其保存在數組中。例如當我列印或回顯時$array[0]

我應該得到06:00:00

和類似地

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

我的最終目標是使用列印語句列印它們,即

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

輸出

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

答案1

這應該可以做到:

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

鑑於@Stephane 的評論,另一種方法:

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

適用於我的 ksh“93u+”

答案2

看起來您只需要第一個和最後一個記錄的最後一個欄位的值。

最好這樣做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

如果要隨機存取字段,請使用按NR(記錄號/行號)索引的數組:awk

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

相關內容