我不是一个系统pipe理员,但我运行一个小网站,今天我收到警方的传票请求,为了遵守我需要从我们的服务器日志提取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在两个日志中重复,然后输出它。 从我提供的例子来看,知识产权将是85.40.142.111。
你能帮忙吗?
我build议使用剪切,而不是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”replace为“-f2”。
HTH。
如果你想要的只是一个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