#use warnings;
####
my $count = 0;
####
my ($el1,$el2,$output,$input);
my (@data,@file2_data,@array_2,@data_1,@array_4,@data_4,@array_5,@array_6,@data_7,@array_8);
my ($input_1,$input_2,$input_3,$input_4,$stage_1,$stage_2,$stage_3,$stage_4,$output_3,$final_join);
my ($marc_data,$marc_add,$V_output,$join_1,$join_2,$join_3,$join_4);
my ($data,$address,$stage_output,$element2,$marc_data_1,$marc_add_1,$join_for_2nd_stage);
my ($element_4,$file3_data,$file3_add,$dataout,$marc_array,$file3_data_1,$file3_add_1,$dataout_1,$marc_array_1,$join_1st_stage_file2_file3,$nothing,$nothing_1,$nothing_2,$nothing_3,$dataout_final,$marc_array_final);
####
open my $fh2, '<', $file2 or die "Can't open $file2: $!"; #XX.file2 file
open my $fh3, '<', $file3 or die "Can't open $file3: $!"; #xx.file3 file
...
my @array_1 = <$fh2>;
...
my @array_4 = <$fh3>;
...
open my $fh5, '<', $file2 or die "Can't open $file2: $!"; #XX.file2 file
my @array_3 = <$fh5>;
...
open my $fh6, '<', $file3 or die "Can't open $file2: $!"; #XX.file2 file
my @array_7 = <$fh6>;
####
$join_1 = join (" ", ("$input_1","$V_output","$marc_data","$marc_add","$stage_1"));
...
$join_2 = join (" ", ("$input_2","$V_output","$marc_data","$marc_add","$stage_2"));
...
$join_3 = join (" ", ("$input_3","$V_output","$marc_data","$marc_add","$stage_3"));
...
$join_4 = join (" ", ("$input_4","$V_output","$marc_data","$marc_add","$stage_4"));
...
$join_1st_stage_file2_file3 = join (" ", ("$input_2","$output_2","$data","$address","$stage_output_1","$file3_data","$file3_add","$dataout","$marc_array"));
...
$join_for_2nd_stage = join(" ",("$input_2","$output_2","$data","$address","$stage_output_1","$file3_data","$file3_add","$dataout","$marc_array","$nothing","$nothing_1"));
...
$join_for_2nd_stage = join(" ",("$input_2","$output_2","$data","$address","$stage_output_1","$file3_data","$file3_add","$dataout","$marc_array","$nothing","$nothing_1"));
...
$final_join = join (" ",("$input_2","$output_2","$data","$address","$stage_output_1","$file3_data","$file3_add","$dataout","$marc_array","$nothing","$nothing_1","$dataout_final","$marc_array_final"));
...
$final_join = join (" ",("$input_2","$output_2","$data","$address","$stage_output_1","$file3_data","$file3_add","$dataout","$marc_array","$nothing","$nothing_1","$dataout_final","$marc_array_final"));
####
#!/usr/bin/perl
use strict;
use warnings;
use Getopt::Long;
my $output_file = 'OUTPUT_FILE'; ## output file name
GetOptions( 'file1=s' => \my $file1, 'file2=s' => \my $file2, 'file3=s' => \my $file3 );
open my $fh1, '<', $file1 or die "Can't open $file1: $!"; # file1 list by user output list
open my $fh2, '<', $file2 or die "Can't open $file2: $!"; # XX.file2 file
# can make this as an option 1st...
my @array_1 = <$fh2>;
my @array_2;
while ( <$fh1> ) { ## my config file
next unless /\S/;
my ( $input, $output ) = split;
for ( @array_1 ) {
next unless /\S/;
next unless /\Q$output/ && /\Q$input/;
# print out all the matching output lines
my @V_output = ( split )[ 7, 2, 3 ];
my %stages = ( split )[ 11, 13, 15, 17, 19, 21, 23, 25 ];
for my $key ( grep /\Q$input/, keys %stages ) {
push @array_2, "$key @V_output $stages{$key}";
last;
}
}
}
open my $fh3, '<', $file3 or die "Can't open $file3: $!"; # xx.file3 file
my @array_3 = <$fh3>;
my @array_4;
for ( @array_2 ) {
my @data_1 = split;
for ( @array_3 ) {
my @data_2 = ( split )[ 3, 4, 7, 9 ];
if ( $data_2[ 0 ] == $data_1[ 2 ] && $data_2[ 0 ] == $data_1[ 3 ] ) {
push @array_4, "@data_1 @data_2";
}
}
}
my @array_5;
for ( @array_4 ) {
my @data = split;
for ( @array_1 ) {
my ( $marc_data, $marc_add, $output, $input, $stage ) = ( split )[ 2, 3, 7, 11, 13 ];
if ( $output =~ /\Q$data[1]/ ) {
if ( $input =~ /\Q$data[0]/ && $stage =~ /\Q$data[1]/ ) {
push @array_5, "@data N/A N/A";
}
elsif ( $input =~ /\Q$data[4]/ && $stage =~ /\Q$data[1]/ ) {
push @array_5, "@data $marc_data $marc_add";
}
}
}
}
my @array_6;
for ( @array_5 ) {
my @data = split;
for ( @array_3 ) {
my ( $file3_data, $file3_add, $dataout, $marc_array ) = ( split )[ 3, 4, 7, 9 ];
if ( 'N/A' =~ /$data[9]/ && 'N/A' =~ /$data[10]/ ) {
push @array_6, "@data N/A N/A";
last;
}
elsif ( $file3_data =~ /$data[9]/ && $file3_add =~ /$data[10]/ ) {
push @array_6, "@data $dataout $marc_array";
last;
}
}
}
open my $fh4, '>', $output_file or die "Can't open $output_file: $!"; #output file
print $fh4 <<'HEADER';
STAGE_N STAGE_N+1
<<<<<>>>>>>>. <<<<