#! /usr/bin/env perl use strict; use warnings; use 5.010; die "Usage: $0 report status\n" if 2 != @ARGV; my $report_file = shift @ARGV; my $status_file = shift @ARGV; # hash for lookup of already seen datasets my %seen; # open report for reading open my $rfh, '<', $report_file or die "open($report_file,<) failed: $!"; # open status for writing (appending), change to > for overwriting open my $wfh, '>>', $status_file or die "open($status_file,>>) failed: $!"; LINE: while ( my $line = <$rfh> ) { warn "(D) read: $line\n"; # skip empty lines next LINE if $line =~ m/^\s*$/; chomp $line; # split into fields my ( $field1, $field2, $date1, $date2 ) = split m/\t/, $line; # no action if "date2" is not "-"; read next line next LINE if $date2 ne '-'; # prepare a string to compare from first three fields my $to_save = join "\t", $field1, $field2, $date1; # check dataset (and register it). If not yet seen, write it to status file if ( ! $seen{ $to_save }++ ) { say $wfh $to_save; } } close $wfh or die "close($status_file) failed: $!;"; close $rfh; __END__