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

나의 궁극적인 목표는 print 문을 사용하여 인쇄하는 것입니다.

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

관련 정보