我想做类似的事情:
@iplist
。%iplist2
中是否存在IP。我试过这样的事情:
for ($i = 0; $i < $list*3; $i+=3) {
push(@iplist, $tablist[$i+1]); #This work ok.
#But here I have problem.
if (grep $_ eq $tablist[$i+1], @iplist2) {
# Here I want to increment value of $iplist2($tablist[$i+1]).
# I know, that probably I need to use something like
# $iplist2($tablist[$i+1]) = old_value + 1, but I don't know how exactly
# to do it.
}
else {
# Here I want to push to array %iplist2 ip adres and make value 1
# for this ip. (Something like push %iplist2, $tablist[$i+1]=>1).
}
}
或许有人有其他想法怎么做?我只需要有adres ip和一些值的数组。如果ip存在于数组中,只需增加值。
@edit
一些示例:
例如我有127.0.0.1
并且它不在数组中。因此,IP 127.0.0.1
的值为1
。我们有例如IP 111.111.111.111
,它已经在表格中并且具有值4
。所以我需要为此值添加+ 1。
也许它看起来会更好:127.0.0.1
不存在,所以我需要执行以下操作:$iplist2{127.0.0.1} = 1;
并且111.111.111.111
存在且具有一定价值。 $iplist2{111.111.111.111} = some_value.
所以我需要增加这个值:$iplist2{111.111.111.111} = some_value + 1
。我在$tablist[$i+1]
答案 0 :(得分:1)
我认为这就是你要找的东西。想法是更新grep调用中的IP计数。我展示了如何按照它们在列表中出现的顺序生成ip列表。但您也可以使用keys %ipcounts
以未指定的顺序检索相同的列表。
#!/usr/bin/perl
# Some data in a list with 3 items per ip
my @list = ('dummy', '127.0.0.1', 'dummy',
'dummy', '192.168.0.1', 'dummy',
'dummy', '127.0.0.1', 'dummy');
# Compute interesting indices
my @list_idx = map { 1+3*$_ } 0..($#list/3);
my %ipcounts = ();
my @iplist = grep { !$ipcounts{$_}++ } @list[@list_idx];
print "IP LIST: \n-", join("\n-", @iplist), "\n";
print "IP COUNT:\n";
map { print "-", $_, " -> ", $ipcounts{$_}, "\n" } keys(%ipcounts);
答案 1 :(得分:0)
我差不多完成了。现在我不知道如何检查具有此IP的阵列是否已存在。现在它就像:
for ($i = 0; $i < $list*3; $i+=3) {
push(@iplist, $tablist[$i+1]); #This work ok.
#But here I have problem.
if (grep $_ eq $tablist[$i+1], @iplist2) #I have no idea how make this if.
{
$iplist2{$tablist[$i+1]} += 1;
}
else {
$iplist2{$tablist[$i+1]} = 1;
}
}
如果巫婆检查是否存在$ iplist2的某个元素,其中关键字是ip,我需要做一些。 所以我的意思是:
if($iplist2($some_key_word) already exists) then
#do something
else
#do something