Я использую DHCP-сервер в локальной сети, который вызывает этот скрипт каждые несколько секунд:

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

Я также пытался использовать diff, но он выглядит даже более сложным, чем awk, потому что он требует сначала отфильтровать измененные строки из вывода.

Что не так: $ ADDED никогда не получает правильные (даже любые) значения, что означает, что awk работает не так, как задумано. Можете ли вы объяснить, что не так? Я совсем новичок в awk. Благодарю.

1 ответ1

0

Я знаю только инструмент, который вы ищете! comm .

Текущий файл 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

Новый 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

Вывод 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

Флаг -1 подавляет линия , уникальная для первого файла, флаг -3 подавляет строки в обеих файлах, а утилита comm требует, чтобы файлы будут в отсортированном порядке , который они оба сортируются.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .