LInux sort / uniq apache日志

时间:2011-05-03 12:40:33

标签: linux sorting unique logging

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

我到目前为止 / home / $:cat all.txt | awk'{print $ 1}'| sort -u | “{打印整行??}”

上面给出了IP(约合30),现在我还需要剩下的部分(请求)。

3 个答案:

答案 0 :(得分:0)

我讨厌唯一没有与sort相同的选项,或者那种不能做它所说的,我认为应该工作[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]根据手册页

答案 1 :(得分:0)

使用关联数组来跟踪您已找到的IP:

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

答案 2 :(得分:0)

以下内容应该有效:

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

这将以相反的顺序获取文件,并使用第一个字段进行稳定排序,仅保留唯一项目。