我有小文件(100)行的web请求(apache std格式)有来自客户端的多个请求。我想在我的文件中只有一个请求(行)列表来自UNIQUE IP并且是最新的条目
我到目前为止 / home / $:cat all.txt | awk'{print $ 1}'| sort -u | “{打印整行??}”
上面给出了IP(约合30),现在我还需要剩下的部分(请求)。
答案 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
这将以相反的顺序获取文件,并使用第一个字段进行稳定排序,仅保留唯一项目。