Проблема в том, что: у меня есть разные txt-файлы, в которых зарегистрированы временная метка и 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