免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2245 | 回复: 8
打印 上一主题 下一主题

如何提取数组前后的变化元素? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-09-13 16:00 |只看该作者 |倒序浏览
last命令出的东西全导入一个@last数组,以此提取访问该服务器的IP和时间点
如何做到每次遍历@last数组,都只将新增的行提取出来?

论坛徽章:
0
2 [报告]
发表于 2010-09-13 16:23 |只看该作者
本帖最后由 下后下前拳 于 2010-09-13 18:25 编辑

回复 1# 下后下前拳


    这是小弟用的代码,最后插库。。现在不知道如何每次都取出新的行插进去。
use strict;
use DBI;
my @last1=`last`;
my @last=reverse(@last1);
my @split;
my $host;
my @eth0;
my $ip;
my $access_time;
my $left_time;
my $date;
my $sth;
my $dbh;
my $sql;
my $db;

open(ETH0,"/etc/sysconfig/network-scripts/ifcfg-eth0");

while(<ETH0>){
        if ($_=~/IPADDR/){
        @eth0=split("=",$_);
        $host=$eth0[1];
        }
}


close ETH0;


foreach(@last){
if($_=~/^root/){
@split=split(" ",$_);
$ip=$split[2];
$access_time=$split[6];
$left_time=$split[8];
$date=$split[4]." ".$split[5];
$db="DBI:mysql:syslog:192.168.31.23;user=root;password=";
$sql="insert into ip_access(host,access_ip,access_time,left_time,date) values('$host','$ip','$access_time','$left_time','$date')";
$dbh=DBI->connect($db);
$sth=$dbh->prepare($sql) or die "can't use sql statement" . DBI->errstr;
$sth->execute();
}
}

$sth->finish();
$dbh->disconnect();
print "insert data over.\n";

论坛徽章:
0
3 [报告]
发表于 2010-09-13 16:40 |只看该作者
不知道有没有了解错~~~新增行··一般放在后面吧?记录前一次数组下标~~~下次比较~·

论坛徽章:
0
4 [报告]
发表于 2010-09-13 17:16 |只看该作者
恩,我也是这么想的,去搞下。

论坛徽章:
0
5 [报告]
发表于 2010-09-13 18:24 |只看该作者
不行。。这个弯转不过来。。想不出怎么去写。

论坛徽章:
0
6 [报告]
发表于 2010-09-13 18:39 |只看该作者
回复 5# 下后下前拳

额····小骆驼~

论坛徽章:
0
7 [报告]
发表于 2010-09-13 18:48 |只看该作者
每次记录最后的access_time,新的LAST数据,access_time大于上一次access_time的就是新增的。

论坛徽章:
0
8 [报告]
发表于 2010-09-14 11:53 |只看该作者
新增需要一个参照
不知道楼主的参照是不是上次的last的结果
如果是这样,那么建议楼主用hash来存放上次的last的结果
这样用hash来判断当前last的结果是否存在hash表中
如果不存在,就说明是新增的,插入数据库即可

论坛徽章:
0
9 [报告]
发表于 2010-09-14 18:05 |只看该作者
用了hash,小弟愚钝,没能想出提取新增行的办法
所以就用每次last出的东东全插入hash,然后truncate数据库的表,再全插入该表的方法实现。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP