2011-05-03 63 views
1

我有小型文件(100)的web请求(apache std格式)行有多个来自客户端的请求。我想只在我的文件中有一个来自UNIQUE IP的请求(行)列表,并且是最新的条目LInux排序/ uniq apache日志

我到目前为止 /home/$:cat all.txt | awk'{print $ 1}'| sort -u | “{print the whole line ??}”

上面给出了IP(大概30是正确的),现在我需要剩下的行(请求)。

+0

例行: 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

+0

请给出更多输入和期望输出的例子。 – Marcin 2011-05-03 13:24:12

回答

0

使用关联数组来跟踪其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 
0

我恨唯一不作为排序都使用相同的选项,或者诸如此类不能做什么它说,我认为这应该工作[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根据该男子页

0

下面应该工作:

tac access.log | sort -f -k1,1 -us 

这需要以相反的顺序文件并执行使用第一场一个稳定的排序,仅保留的唯一项目。