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.

おすすめ記事