2017-04-19 121 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