2017-04-19 118 views
0

我有這個文件,是不斷從網站訪問者收集數據:bash腳本從文件打印某些數據

IP-ADDR : DATE : BITCOIN-ADDR 

我在想,如果有發現,有相同的IP-ADDR線的方式但不同的BITCOIN-ADDR並打印它們。

例如,此文件在運行腳本:

11.11.11.11 : 19-04-2017 08:01:33am : 3N1zXzkjYYNcUSZHD98wcG7UXjNxkCXXXX 
22.22.22.22 : 19-04-2017 08:01:35am : 1HSJDWp5gLybnhowBZcnoYTBBmuJxBXXXX 
12.12.12.12 : 19-04-2017 08:02:24am : 1HSJDWp5gLybnhowBZcnoYTBBmuJxBYYYY 

每行是不同的,打印沒有輸出。

而且,非常重要的是在

11.11.11.11 : 19-04-2017 08:01:33am : 3N1zXzkjYYNcUSZHD98wcG7UXjNxkCXXXX 
22.22.22.22 : 19-04-2017 08:01:35am : 1HSJDWp5gLybnhowBZcnoYTBBmuJxBXXXX 
22.22.22.22 : 19-04-2017 08:02:24am : 1HSJDWp5gLybnhowBZcnoYTBBmuJxBXXXX 
22.22.22.22 : 19-04-2017 08:01:35am : 1HSJDWp5gLybnhowBZcnoYTBBmuJxBXXXX 
22.22.22.22 : 19-04-2017 08:02:24am : 1HSJDWp5gLybnhowBZcnoYTBBmuJxBXXXX 

運行不會打印出任何東西。

,但在

11.11.11.11 : 19-04-2017 08:01:33am : 3N1zXzkjYYNcUSZHD98wcG7UXjNxkCXXXX 
22.22.22.22 : 19-04-2017 08:01:35am : 1HSJDWp5gLybnhowBZcnoYTBBmuJxBXXXX 
22.22.22.22 : 19-04-2017 08:02:24am : 1HSJDWp5gLybnhowBZcnoYTBBmuJxBYYYY 

運行後會看到IP 22.22.22.22有不同的比特幣地址,將打印:

1HSJDWp5gLybnhowBZcnoYTBBmuJxBXXXX 
1HSJDWp5gLybnhowBZcnoYTBBmuJxBYYYY 

我使用一個代碼有人在這裏有幫我前段時間:

awk -F " : " '{ printf "%s_%s\n" , $1, $3 }' test.txt | sort | sed 's/\(\s*\)\(.*\)\(\s\)/\2/' | uniq | perl -pe 's/(\s*)(.*?)_(.*)/\2/' | uniq -d 

,如果在最後一個例子運行,將打印

22.22.22.22 

但我無法圍繞它來使它適用於比特幣地址。

這裏有三個例子:

1.1.1.1 : 19-04-2017 08:01:33am : aaaaa 
2.2.2.2 : 19-04-2017 08:01:33am : bbbbb 

3.3.3.3 : 19-04-2017 08:01:33am : ccccc 
3.3.3.3 : 19-04-2017 08:01:33am : ccccc 

4.4.4.4 : 19-04-2017 08:01:33am : ddddd 
4.4.4.4 : 19-04-2017 08:01:33am : eeeee 

第一個例子,每一個IP和BTC是不同的,我不介意。

第二個例子,同樣的ip但同樣的btc,我也不介意,它只是一個誠實的返回訪問者,一遍又一遍地使用相同的btc,我不希望腳本也顯示出來。

現在,第三個例子中,有一個訪問者濫用規則並使用來自同一個ip addr的不同btc addr。使用我發佈的腳本,我可以打印他的IP,並通過其他腳本將其添加到iptables防火牆。但我需要另一個腳本(一個我要求幫助在這裏)來打印我下面的輸出:

ddddd 
eeeee 

所以我可以用另一個腳本並阻止其訪問。

請幫忙嗎?謝謝!

LE:實測值的溶液(感謝@danielbmartin):

awk '{if (index(a[$1],$NF)==0) a[$1]=a[$1]" " $NF} 
    END{for (j in a) 
    {n=split(a[j],b); 
    if (n>1) print j" references "a[j]}}' \ 
$InFile >$OutFile 

回答

1
$ cat ip.txt 
1.1.1.1 : 19-04-2017 08:01:33am : aaaaa 
2.2.2.2 : 19-04-2017 08:01:33am : bbbbb 

3.3.3.3 : 19-04-2017 08:01:33am : ccccc 
3.3.3.3 : 19-04-2017 08:01:33am : ccccc 

4.4.4.4 : 19-04-2017 08:01:33am : ddddd 
4.4.4.4 : 19-04-2017 08:01:33am : eeeee 

$ awk -F: '($1 in a) && a[$1]!=$NF{print $1} {a[$1]=$NF}' ip.txt 
4.4.4.4 
  • -F:使用:作爲字段分隔
  • {a[$1]=$NF}創建與第一列作爲關鍵和最後一列的陣列值
  • ($1 in a) && a[$1]!=$NF如果第一列已存在爲鍵但值不匹配
    • print $1打印第一列


要打印最後一列

$ awk -F: '($1 in a) && a[$1]!=$NF{print a[$1]"\n"$NF} {a[$1]=$NF}' ip.txt 
ddddd 
eeeee 

注:此代碼不會考慮超過一個錯配

+0

upvoted,很好地拼在一起答案。任何機會,你可以看看我最近關於iptables/networking的問題嗎? http://stackoverflow.com/questions/43508741/iptables-script-to-block-all-internet-access-except-for-desired-applications你的智慧會非常有幫助! – Webeng