データベースに接続し、dhcpd.logファイルからIPとMACを挿入するシェルスクリプトを作成しました。
#/!bin/bash
dhcpLogFile="/var/log/dhcpd.log"
NumberOfLines=$(awk '/DHCPACK/ { print $8} ' $dhcpLogFile | awk '!x[$0]++'|awk 'BEGIN{i=0}{i++;}END{print i}')
j=1
while [ $NumberOfLines -gt 0 ]
do
ip=$(awk '/DHCPACK/ { print $8} ' $dhcpLogFile | awk '!x[$0]++' |cut -f$j -d$'\n')
mac=$(awk '/DHCPACK/ { print $10} ' $dhcpLogFile | awk '!x[$0]++' |cut -f$j -d$'\n')
let "j +=1"
let "NumberOfLines -=1"
mysql -u root --password='pw' MatchingDB <<- _END_
INSERT INTO IP_MACTable (IP_Address, MAC) VALUES ('$ip','$mac');
_END_
done
私の質問は、ip属性が重複しているときに既存のレコードを置き換え、ip属性が重複していないときに新しいレコードを正常に挿入するように上記の挿入クエリを変更する方法です。
このようなことを試しましたが、引き続きエラー(構文エラー)が返されます。
INSERT INTO IP_MACTable (IP_Address, MAC) VALUES ('$ip','$mac')
ON DUPLICATE KEY UPDATE MAC = VALUES('$mac')
私のサーバーによると、エラーは次のとおりです。near '$mac')
エラーコードは#1064です。
答え1
インサートは次のように変更できます。
INSERT INTO IP_MACTable (IP_Address, MAC) VALUES ('$ip','$mac')
ON DUPLICATE KEY UPDATE MAC = VALUES('$mac')