Bash를 사용하여 배열에서 날짜 출력

Bash를 사용하여 배열에서 날짜 출력

누군가가 DHCP를 통해 내 네트워크에 접속하는 시기를 감지한 다음 세부 정보를 이메일로 보내는 스크립트를 작성하려고 합니다. 내가 겪고 있는 문제는 루프에서 신기원 시간을 구문 분석하는 것입니다.

렌탈 정보 가져오기, 오류 확인, 비교, 이메일 보내기 등의 코드는 문제가 되지 않기 때문에 생략했습니다.

임대정보 파일의 형식은 다음과 같습니다.

epoch time   MAC address         IP Address        Hostname  DeviceID
4476705071   11:11:11:11:11:11   111.111.111.111   device1   *
7956915742   22:22:22:22:22:22   222.222.222.222   device2   *

다음 코드를 사용하여 파일을 참조합니다.

#! /bin/bash

LEASELEN=21600 # SET THE LEASE LENGTH TO 6 HOURS TO DETERMINE START OF LEASE

arrEND=($(cat /usr/local/bin/dhcp/leases.new | awk '{print $1}'))       # LEASE EXPIRY IN EPOCH
arrMAC=($(cat /usr/local/bin/dhcp/leases.new | awk '{print $2}'))       # MAC ADDRESS
arrIP=($(cat /usr/local/bin/dhcp/leases.new | awk '{print $3}'))        # IP ADDRESS
arrHOST=($(cat /usr/local/bin/dhcp/leases.new | awk '{print $4}'))      # HOSTNAME

echo 'Current and New connections to the network via DHCP:'
for ((i=0;i<${#arrIP[@]};i++)) # ITERATE FROM 0 TO TOTAL NUMBER OF ENTRIES
do
  arrSTART=$(expr ${arrEND[$i]} - $LEASELEN) # CALCULATE LEASE START FROM LEASE END
  arrSTARTH=`date -d @${arrSTART[$i]} +"%Y-%m-%d %T"` # CONVERT EPOCH TO HUMAN-READABLE
  echo "\""${arrHOST[$i]}"\" started using "${arrIP[$i]}" on "${arrSTARTH[$i]}" with MAC "${arrMAC[$i]}"." #OUTPUT
done

exit 0

출력은 다음과 같습니다

Current and New connections to the network via DHCP:
date: invalid date ‘@4476683471’
"device1" started using 111.111.111.111 on  with MAC 11:11:11:11:11:11.
date: invalid date ‘@’
"device2" started using 222.222.222.222 on  with MAC 22:22:22:22:22:22.

문제의 일부는 시간을 너무 늦게 설정했다는 것입니다. 왜냐하면 대여 파일 시작 부분에 2줄을 더 추가하여 다음과 같이 만들 수 있기 때문입니다.

epoch time   MAC address         IP Address        Hostname    DeviceID
1465374613   00:b0:d0:01:32:86   192.168.0.1       pre-device1 *
1465374820   00:00:00:00:00:00   0.0.0.0           pre-device2 *
4476705071   11:11:11:11:11:11   111.111.111.111   device1     *
7956915742   22:22:22:22:22:22   222.222.222.222   device2     *

첫 번째 결과에서는 날짜를 얻지만 그 이후에는 날짜를 얻지 못합니다.

산출:

Current and New connections to the network via DHCP:
"pre-device1" started using 192.168.0.1 on 2016-06-08 04:30:13 with MAC 00:b0:d0:01:32:86.
date: invalid date ‘@’
"pre-device2" started using 0.0.0.0 on  with MAC 00:00:00:00:00:00.
date: invalid date ‘@’
"device1" started using 111.111.111.111 on  with MAC 11:11:11:11:11:11.
date: invalid date ‘@’
"device2" started using 222.222.222.222 on  with MAC 22:22:22:22:22:22.

내가 뭘 잘못하고 있는지 아시나요?

답변1

이것을 사용하지 않겠습니까 gawk? 전환 시간과시간:

awk 'BEGIN{PROCINFO["strftime"]="%s"} { print $4, "started using", $3, "on", strftime("%Y-%m-%d %T",$1), "with MAC", $2"."}' /usr/local/bin/dhcp/leases.new

산출:

device1 started using 111.111.111.111 on 2111-11-11 18:11:11 with MAC 11:11:11:11:11:11.
device2 started using 222.222.222.222 on 2222-02-22 23:22:22 with MAC 22:22:22:22:22:22.

관련 정보