我有这个不断收集网站访问者数据的文件:
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,我不会&#39 ; t希望脚本显示出来。
现在,第三个例子,有一个访问者滥用规则并使用来自同一个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
答案 0 :(得分: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
注意:此代码不考虑多个不匹配