Я не системный администратор, но у меня есть небольшой веб-сайт, и сегодня я получил запрос в суд из полиции, чтобы выполнить его, мне нужно извлечь IP-адреса из журналов нашего сервера на необходимое время.
Это моя проблема:
У меня log1.txt
/var/log/lighttpd/access.log.1.gz:84.20.132.141 180.175.44.143 - [28/Apr/2011:09:23:30 -0500] "POST /base/script.php HTTP/1.1" 200 158 "http://ref/,http://ref/" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/530.5 (KHTML, like Gecko) Chrome/2.0.172.28 Safari/530.5"
/var/log/lighttpd/access.log.1.gz:85.40.142.111 180.175.44.143 - [28/Apr/2011:09:23:30 -0500] "POST /base/script.php HTTP/1.1" 200 158 "http://ref/,http://ref/" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/530.5 (KHTML, like Gecko) Chrome/2.0.172.28 Safari/530.5"
В файле более 500 таких строк
Это ожидаемый результат: 85.40.142.111, 84.20.132.141 и другие ips.
И у меня есть log2.txt, который имеет точно такой же формат
Мне также нужно вывести IP-адреса из этого журнала, например 85.40.142.111, 81.02.32.61,
Мне нужно использовать результаты вывода из log1 и сопоставить их с log2, и если один IP-адрес повторяется в обоих журналах, выведите его. Из приведенных мною примеров этот IP-адрес будет 85.40.142.111.
Не могли бы вы помочь?
Если все, что вам нужно, это список IP-адресов
#!/bin/bash
cut -d ' ' -f1 log1.txt | cut -d ':' -f2 | sort | uniq >log1.out
cut -d ' ' -f1 log2.txt | cut -d ':' -f2 | sort | uniq >log2.out
while read IP
do
sed -n /$IP/p log2.out
done <log1.out
Я бы предложил использовать cut, а не grep:
cut -d\ -f1 log1.txt | sort | uniq > ip1.txt
cut -d\ -f1 log2.txt | sort | uniq > ip2.txt
grep -f ip2.txt ip1.txt
Если IP-адрес, который вам нужен, является вторым в каждой строке, а не первым, замените «-f1» на «-f2».
HTH.