2015-10-01 50 views
-2

我需要解析日誌文件,例如重複:擊解析器和找到狀態

151.67.79.39/mnt3/WkJWwe3eYp/2w8PNGLrBh/158 
    95.245.46.253/storage1/FV3QLXuaDG/PlfwC4BtV9/254 
    151.75.214.206/storage1/DeOq0ej9B2/fr48SLpuri/80 
    87.17.174.236/storage1/IDtx9c2p7i/VwTNiwHAJF/255 
    87.17.174.236/storage1/IDtx9c2p7i/VwTNiwHAJF/255 
    87.17.174.118/storage1/IDtx9c2p7i/VwTNiwHAJF/255 
    87.17.174.236/storage1/IDtx9c2p7i/VwTNiwHAJF/255 
    87.161.130.61/storage1/IDtx9c2p7i/VwTNiwHAJF/255 
    62.43.164.247/storage1/eDoT6fI4vp/76GwaRzJCL/31 
    93.229.17.99/mnt3/uQi9iiyMZA/G83FZV2zCB/160 
    151.75.214.206/storage1/DeOq0ej9B2/fr48SLpuri/80 
    93.40.125.31/storage1/4mN9uJGwA2/0uOM39Gx8g/10 
    95.245.46.253/storage1/FV3QLXuaDG/PlfwC4BtV9/254 
    151.75.214.206/storage1/DeOq0ej9B2/fr48SLpuri/80 
    87.17.174.236/storage1/IDtx9c2p7i/VwTNiwHAJF/255 
    151.75.214.206/storage1/DeOq0ej9B2/fr48SLpuri/80 
    95.245.46.253/storage1/FV3QLXuaDG/PlfwC4BtV9/254 
    151.75.214.206/storage1/DeOq0ej9B2/fr48SLpuri/80 
    94.38.149.210/storage1/RXhISkEsOw/AHwro83Lyp/97 
    95.245.46.253/storage1/FV3QLXuaDG/PlfwC4BtV9/254 
    151.75.214.206/storage1/DeOq0ej9B2/fr48SLpuri/80 
    95.245.46.253/storage1/FV3QLXuaDG/PlfwC4BtV9/254 
    151.75.214.206/storage1/DeOq0ej9B2/fr48SLpuri/80 
... 

[IP]/[ITEM1]/[ITEM2]/[ITEM3]/[ITEM4]

我需要找到所有具有相同ITEM2的IP。 任何想法? 謝謝:)

回答

1

awk來救援!

$ tr -d ' ' <file | awk -F"/" -vOFS=, ' 
     {a[$3]=a[$3]?a[$3] OFS $1:$1} 
    END{for(i in a) print i":"a[i]}' 

將打印

RXhISkEsOw:94.38.149.210 
uQi9iiyMZA:93.229.17.99 
FV3QLXuaDG:95.245.46.253,95.245.46.253,95.245.46.253,95.245.46.253,95.245.46.253 
eDoT6fI4vp:62.43.164.247 
IDtx9c2p7i:87.17.174.236,87.17.174.236,87.17.174.118,87.17.174.236,87.161.130.61,87.17.174.236 
4mN9uJGwA2:93.40.125.31 
WkJWwe3eYp:151.67.79.39 
DeOq0ej9B2:151.75.214.206,151.75.214.206,151.75.214.206,151.75.214.206,151.75.214.206,151.75.214.206,151.75.214.206 

第一tr是刪除輸入文件的空間,如果你的文件是乾淨的,你可以刪除

UPDATE 如果你希望所有獨特的IP而不是所有的IP,這是一個不同的任務,但awk是由它決定的。

$ tr -d ' ' <file | awk -F"/" -vOFS=, ' 
     {k=$3 FS $1} 
    !d[k]{a[$3]=a[$3]?a[$3] OFS $1:$1;d[k]++} 
    END{for(i in a) print i":"a[i]}' 

將導致(這裏獨特性ITEM2的上下文中定義)

RXhISkEsOw:94.38.149.210 
uQi9iiyMZA:93.229.17.99 
FV3QLXuaDG:95.245.46.253 
eDoT6fI4vp:62.43.164.247 
IDtx9c2p7i:87.17.174.236,87.17.174.118,87.161.130.61 
4mN9uJGwA2:93.40.125.31 
WkJWwe3eYp:151.67.79.39 
DeOq0ej9B2:151.75.214.206 

更新2

我希望你沒有準備的規格爲程序員:)

如果列表大小大於1時,您需要ITEM2的唯一IP列表。

$ tr -d ' ' <file | awk -F"/" -vOFS=, ' 
     {k=$3 FS $1} 
!d[k]{a[$3]=a[$3]?a[$3] OFS $1:$1;d[k]++;c[$3]++} 
    END{for(i in a) if(c[i]>1) print i":"a[i]}' 

將打印

IDtx9c2p7i:87.17.174.236,87.17.174.118,87.161.130.61 

,如果你不需要的項目前綴從打印語句刪除i":"。或者,如果您需要與逗號更改OFS值不同的分隔符。

+0

感謝您的回答karakfa。你能告訴我如何只有所有ITEM2具有不同的IP(沒有重複)嗎? –

+0

例如:在我的示例日誌中,只有ITEM2「IDtx9c2p7i」具有多個不同的IP,因此我只想獲得:87.17.174.236/IDtx9c2p7i,87.17.174.118/IDtx9c2p7i/,87.17.174.236/IDtx9c2p7i/,87.161.130.61/ IDtx9c2p7i/ –

+0

請參閱更新。 – karakfa