Monitorando mudanças no arquivo com o bash

0

Estou executando o servidor DHCP na rede local, que chama esse script a cada alguns segundos:

dumpleases | awk '{print $2}' > leasesnow     #get list of all IPs leased in a file, one per line
ADDED='awk 'NR==FNR{a[$1]=$2;next} !($1 in a) { print $2 }' leasesthen leasesnow'     #try to extract only new leases to variable
print $ADDED
checkin.sh $ADDED    #do something with new devices on network
cp -f leasesnow leasesthen

Eu também tentei usar o diff, mas parece ainda mais complexo do que o awk, porque ele precisa filtrar as linhas alteradas da saída primeiro.

O que está errado: $ ADDED nunca recebe valores corretos (mesmo nenhum), o que significa que o awk não está funcionando como deveria. Você pode por favor explicar o que está errado? Eu sou muito novo para o awk. Obrigado.

    
por ZuOverture 12.06.2015 / 18:44

1 resposta

0

Eu conheço apenas a ferramenta que você está procurando! comm .

O arquivo ips atual old.txt .

68.180.194.242
68.180.194.243
69.147.112.168
69.147.112.169
87.248.122.141
87.248.122.142
209.131.41.48
209.131.41.49
216.39.58.17
216.39.58.18
216.39.58.78
217.12.1.124
217.12.1.125
217.146.191.18
217.146.191.19
87.248.125.48
87.248.125.49
98.136.63.35

O novo arquivo ips new.txt .

68.180.194.242
68.180.194.243
69.147.112.168
69.147.112.169
87.248.122.141
87.248.122.142
209.131.41.48
209.131.41.49
216.39.58.17
216.39.58.18
216.39.58.78
217.12.1.124
217.12.1.125
217.146.191.18
217.146.191.19
87.248.125.48
87.248.125.49
98.136.63.35
68.142.243.103
98.139.134.96
98.139.134.97
98.139.134.98
98.139.134.99
173.224.120.84
37.193.134.104
178.65.210.178
31.130.202.80
94.228.44.113
161.69.47.4
210.75.14.146

A saída de comm -13 <(sort old.txt) <(sort new.txt)

161.69.47.4
173.224.120.84
178.65.210.178
210.75.14.146
31.130.202.80
37.193.134.104
68.142.243.103
94.228.44.113
98.139.134.96
98.139.134.97
98.139.134.98
98.139.134.99

O sinalizador -1 suprime as linhas exclusivas do primeiro arquivo, o sinalizador -3 suprime as linhas em ambos os arquivos e o utilitário comm exige que os arquivos estejam em ordem de classificação, que são ambos classificado.

    
por 12.06.2015 / 19:44