2016-02-02 58 views
0
 
Oct 7  02:55:20  123.111.44.77  99  123.111.66.91 12345  
Oct 7  02:58:10  123.111.44.77  99  123.111.66.98 48575 
Oct 7  02:05:40  123.111.44.77  99  123.111.66.99 09876 
Oct 7  02:50:40  123.111.44.77  99  123.111.66.99 56743  
Oct 7  02:53:00  123.111.44.77  99  123.111.66.12 98475 
Oct 7  02:58:00  123.111.44.77  99  123.111.66.98 12489 

這是輸入。如何使用awk比較其他行中相同兩列的行的兩列?我是否也可以得到相同的行數

所需的輸出是:

 
    123.111.44.77  123.111.66.99 (2)  
    123.111.44.77  123.111.66.98 (2) 

如何使用它AWK怎麼辦?

預先感謝您。

+1

不使用圖像,張貼您的輸入 – haifzhan

+0

您將表格作爲表格格式化 - 只需在表格的每一行前面放置四個空格,它就會顯得很好。 – Simon

+0

請不要在評論中提供示例 - 將它們置於問題中。 – Simon

回答

0

在AWK,

$ awk '{c[$6]++}c[$6]>1{d[$6]=$4}END{for(x in d)printf "%s\t%s (%s)\n",d[x],x,c[x]}' infile 

這將產生

 
123.111.44.77 123.111.66.99 (2) 
123.111.44.77 123.111.66.98 (2) 

你可以調整輸出格式。我用一個空格分隔了前兩個字段和第二個和第三個(計數)字段。你的示例輸出看起來有點像這樣。

上面記錄了右側地址(第6列)的出現次數,並將最後一次出現的地址(第4列)與多次出現的地址一起打印出來(以及圓括號中的記錄)。進一步思考,這可能不是你想要的。 (如果是,太好了!)


如果你想數配對的左,右地址(列4和6),嘗試像

$ awk '{c[$4"\t"$6]++}END{for(x in c)printf "%s (%d)\n",x,c[x]}' infile 

這將打印每一個的配對括號中出現次數的統計。如果你只是想出現不止一次配對,然後添加if條件:

$ awk '{c[$4"\t"$6]++}END{for(x in c)if (c[x]>1){printf "%s (%d)\n",x,c[x]}}' infile 

請注意,所有這些假設你想在4 6列,他們的表現沒有正則表達式檢查地址,等等,看他們是否看起來像地址。

+0

e0k:它的作品非常完美。謝謝 – Pratik

相關問題