我有以下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