Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
perl在每次脚本运行时增加计数器数_Perl - Fatal编程技术网

perl在每次脚本运行时增加计数器数

perl在每次脚本运行时增加计数器数,perl,Perl,我有一个脚本来比较两个文件,并打印出文件上匹配的行。我想添加一个逻辑来帮助我识别这些设备的匹配时间。目前,我已经添加了起始点1,所以每次脚本运行并匹配时,我都希望增加该数字 例如 输入文件:-######################## retiredDevice.txt 阿尔法 贝塔 伽马射线 三角洲 prodDevice.txt 首先 第二 第三 四 伽马射线 三角洲 输出文件:-####################### 最终结果.txt 1三角洲 1伽马 我的目标是在每个匹配行上

我有一个脚本来比较两个文件,并打印出文件上匹配的行。我想添加一个逻辑来帮助我识别这些设备的匹配时间。目前,我已经添加了起始点1,所以每次脚本运行并匹配时,我都希望增加该数字

例如

输入文件:-########################

retiredDevice.txt

阿尔法

贝塔

伽马射线

三角洲

prodDevice.txt

首先

第二

第三

伽马射线

三角洲

输出文件:-#######################

最终结果.txt

1三角洲

1伽马

我的目标是在每个匹配行上添加一个计数器戳记,以确定“Delta”和“Gamma”匹配的时间。脚本每周运行一次。所以每次脚本运行时,在我审核'finalResult.txt'时添加1。结果应该是

三角洲4

伽马3

结果显示me Delta在过去4周匹配,Gamma在过去3周匹配

#! /usr/local/bin/perl 
my $ndays = 1;
my $f1 = "/opt/retiredDevice.txt ";
my $f2 = "prodDevice.txt";
my $outfile = "/opt/final_result.txt";
my %results = ();

open FILE1, "$f1" or die "Could not open file: $! \n";
while(my $line = <FILE1>){   $results{$line}=1;
}
close(FILE1); 
open FILE2, "$f2" or die "Could not open file: $! \n";
while(my $line =<FILE2>) {  
$results{$line}++;
}
close(FILE2); 

open (OUTFILE, ">$outfile") or die "Cannot open $outfile for writing \n";
foreach my $line (keys %results) { 
my $x = $ndays;
$x++;
print OUTFILE "$x : ", $line if $results{$line} != 1;
}
close OUTFILE;
#/usr/local/bin/perl
我的$ndays=1;
my$f1=“/opt/retiredDevice.txt”;
my$f2=“prodDevice.txt”;
my$outfile=“/opt/final_result.txt”;
我的%结果=();
打开文件1,“$f1”或“die”无法打开文件:$!\n”;
而(my$line=){$results{$line}=1;
}
关闭(文件1);
打开文件2,“$f2”或“无法打开文件:$!\n”;
而(我的$line=){
$results{$line}++;
}
关闭(文件2);
打开(OUTFILE,“>$OUTFILE”)或死“无法打开$OUTFILE进行写入\n”;
foreach my$行(键%results){
我的$x=$ndays;
$x++;
如果$results{$line}=1,则打印输出文件“$x:”,$line;
}
关闭输出口;

提前感谢您的帮助

根据您之前的问题和评论,这可能有效

use strict;
use warnings;
use autodie;

my $logfile = 'int.txt';
my $f1 = shift || "/opt/test.txt";
my $f2 = shift || "/opt/test1.txt";
my %results;
open my $file1, '<', $f1;
while (my $line = <$file1>) {
    chomp $line;
    $results{$line} = 1;
}
open my $file2, '<', $f2;
while (my $line = <$file2>) {
    chomp $line;
    $results{$line}++;
}

{ ############ added part
    my %c;
    for (keys %results) {
        $c{$_} = $results{$_} if $results{$_} > 1;
    }
    %results = %c;
} ############ end added part

my (%log, $log);
if ( -e $logfile ) {
    open $log, '<', $logfile;
    while (<$log>) {
        my ($num, $key) = split;
        $log{$key} = $num;
    }
}

open $log, '>', $logfile or die $!;
for my $key (keys %results) {
    my $old = ( $log{$key} || 0 ); # keep old count, or 0 otherwise
    my $new = ( $results{$key} ? 1 : 0 ); # 1 if it exists, 0 otherwise
    print $log $old + $new, " $key\n";
}
使用严格;
使用警告;
使用自动模具;
my$logfile='int.txt';
my$f1=shift | |“/opt/test.txt”;
my$f2=shift | |“/opt/test1.txt”;
我的%结果;
打开我的$file1、、$logfile或die$!;
对于我的$key(key%结果){
my$old=($log{$key}| | 0)|保留旧计数,否则为0
my$new=($results{$key}?1:0)#如果存在,则为1,否则为0
打印$log$old+$new,“$key\n”;
}

分两步执行此计算

每次运行retired和prod之间的比较时,都会生成一个输出文件,并使用唯一的文件名保存,例如,结果XXX,其中XXX表示运行比较的时间

然后编写一个脚本,迭代所有结果XXX文件并生成摘要

我将文件命名为结果YYYY-MM-DD,其中YYYY-MM-DD是创建比较的日期。然后,迭代文件的子集(例如某个月的文件)将相对容易


或者将数据存储在关系数据库中。

diff是否不适合您的需要?diff可以工作?我的问题是,我想确定自从我处理6k+设备以来,我在那里工作了多久。我想把重点放在设备报告更长的时间。thx@看起来最近有人问了一个类似的问题:我同意关于数据库的建议。使用sqlite。每次您想进行不同类型的查询时,编写一条简单的SQL语句要比编写一个完整的程序容易。非常感谢您的回复。脚本作为我的目标与小问题,但计数器是完美的!!!现在的问题是,输出文件现在包含file1和file2中的所有设备,而不是只打印匹配列表。这是确切的输出。运行5次脚本后。5 Beta 5 Gamma 5 forth 5 first 5 second 5 third 5 Delta 5 Alpha-----------------------------------------------------结果应该是匹配的设备--------------------5 Delta 5 Alpha哦,是的,忘了那个部分了。嗯,这很容易。我将编辑脚本。请参阅关于“添加的零件”的注释