我有小型文件(100)的web请求(apache std格式)行有多个来自客户端的请求。我想只在我的文件中有一个来自UNIQUE IP的请求(行)列表,并且是最新的条目LInux排序/ uniq apache日志
我到目前为止 /home/$:cat all.txt | awk'{print $ 1}'| sort -u | “{print the whole line ??}”
上面给出了IP(大概30是正确的),现在我需要剩下的行(请求)。
我有小型文件(100)的web请求(apache std格式)行有多个来自客户端的请求。我想只在我的文件中有一个来自UNIQUE IP的请求(行)列表,并且是最新的条目LInux排序/ uniq apache日志
我到目前为止 /home/$:cat all.txt | awk'{print $ 1}'| sort -u | “{print the whole line ??}”
上面给出了IP(大概30是正确的),现在我需要剩下的行(请求)。
使用关联数组来跟踪其IPS你发现已经:
awk '{
if (!found[$1]) {
print;
found[$1]=1;
}
}' all.txt
这将打印每个IP的第一行。如果你想,那么最后一个:
awk '
{ found[$1] = $0 }
END {
for (ip in found)
print found[ip]
}
' all.txt
我恨唯一不作为排序都使用相同的选项,或者诸如此类不能做什么它说,我认为这应该工作[1],
tac access.log | sort -fb -k1V -u
但很可惜,它没有;
因此,似乎我们坚持在做一些愚蠢像
cat all.txt | awk '{ print $1}' | sort -u | while read ip
do
tac all.txt | grep "^$ip" -h | head -1
done
这实在是低效率的,但“作品”(没有测试它:模块错字当时)
[1根据该男子页
下面应该工作:
tac access.log | sort -f -k1,1 -us
这需要以相反的顺序文件并执行使用第一场一个稳定的排序,仅保留的唯一项目。
例行: 152.111.yy.xx - - [04 /月/ 2011:14:49:26 0200] “POST /requrst.php?q=123” 所以我只想要LAST POST-请求一个IP没有任何IP的重复请求 – Jacob 2011-05-03 12:58:52
请给出更多输入和期望输出的例子。 – Marcin 2011-05-03 13:24:12