我有一个脚本来比较2个文件并打印出文件中的匹配行。我想添加一个逻辑来帮助我确定这些设备的匹配时间。目前我已经添加了起点1,所以我希望每次脚本运行并匹配时都要增加该数字。
实施例
inputfile中: - ########################
retiredDevice.txt
α
β
伽玛
德尔塔
prodDevice.txt
第一
第二
第三
所述
伽玛
德尔塔
输出文件: - #######################
final_result.txt
1 Delta
1 Gamma
我的目标是在每条匹配线上添加一个计数器标记,以确定“Delta”和“Gamma”匹配的时间。每周运行的脚本。所以每当脚本运行时添加1所以当我审核'finalResult.txt时。结果应该是
Delta 4
Gamma 3
结果表明我在过去4周内达到了匹配,而过去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;
提前感谢您的帮助!
答案 0 :(得分:1)
根据您之前的问题和评论,也许这可能有效。
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";
}
答案 1 :(得分:1)
分两步执行此计算。
每次运行retired和prod之间的比较时,都会生成一个使用唯一文件名保存的输出文件,例如: result-XXX其中XXX表示您运行比较的时间。
然后编写一个脚本,迭代所有result-XXX文件并生成摘要。
我将文件命名为结果-YYYY-MM-DD,其中YYYY-MM-DD是创建比较的日期。然后迭代文件的子集(例如某个月的文件)将相对容易。
或将数据存储在关系数据库中。