Проблема в том, что: у меня есть разные текстовые файлы, в которых прописана временная метка и IP-адрес для каждого вредоносного пакета, поступающего на сервер. Что я хочу сделать, так это создать еще один текстовый файл, который показывает для каждого IP-адреса первый раз, когда приходит пакет вредоносного ПО.
В общем, я хочу сделать что-то вроде этого:
for every line in file.txt
if (ip is not present in list.txt)
copy timestamp and ip in list.txt
Я использую awk для этого. Основная проблема это "если ip отсутствует в list.txt". Я делаю это:
{ a=$( grep -w "$3" list.txt | wc -c );
if ( a == 0 )
{
#copy timestamp and ip in list.txt
}
(я использую $3, потому что IP-адрес находится в третьем столбце исходного файла)
Я не знаю, как заставить awk оценить функцию grep. Я также пробовал с обратными кавычками, но это не сработало. Кто-нибудь может подсказать?
Я тестирую свой скрипт на тестовом файле следующим образом:
10 192.168.1.1
11 192.168.1.2
12 192.165.2.4
13 122.11.22.11
13 192.168.1.1
13 192.168.1.2
13 122.11.22.11
14 122.11.22.11
15 122.11.22.11
15 122.11.22.144
15 122.11.2.11
15 122.11.22.111
Что я должен получить:
10 192.168.1.1
11 192.168.1.2
12 192.165.2.4
13 122.11.22.11
15 122.11.22.144
15 122.11.2.11
15 122.11.22.111
Благодаря вашей помощи мне удалось создать сценарий, который соответствует моим потребностям:
awk '
FILENAME == ARGV[1] {
ip[$2] = 1
next
}
! ($2 in ip) {
print $1, $2 >> ARGV[1]
ip[$2] = 1
}
' list.txt file.txt