【发布时间】:2017-04-19 14:48:00
【问题描述】:
我有这个文件不断从网站访问者那里收集数据:
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
【问题讨论】: