2011-05-03 95 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 

這需要以相反的順序文件並執行使用第一場一個穩定的排序,僅保留的唯一項目。