Ниже приведен каркас базовой структуры программы, позволяющий вам сделать это. Если бы я знал, что ты хотел сделать, я был бы намного более полезным.
Я сделал простейшее предположение из возможных, и обработал ваши входные файлы так, как если бы они были фиксированными столбцами с шириной = 7,6 * Как вы уже сообщили мне, что они разделены табуляцией, я изменил код, разбивающий данные на поля.
use autodie;
use strict;
use warnings;
use English qw<$INPUT_LINE_NUMBER>;
my %data;
my $line_no;
open ( my $h, '<', 'good_file.dat' );
while ( <$h> ) {
my ( $col1, $col2, $data ) = split( /\t+/, $_, 3 );
# next unless index( $col1, 'A' ) == 0;
$line_no = $INPUT_LINE_NUMBER;
my $rec
= { col1 => $col1
, col2 => $col2
, data => $data
, line => $line_no
};
push( @{ $data{"$col1-$col2"} }, $rec );
$data{ $line_no } = $rec;
}
close $h;
open ( $h, '<', 'old_file.dat' );
while ( <$h> ) {
my ( $col1, $col2, $data ) = split( /\t+/, $_, 3 );
...
}
Ниже приведен способ печати значений в файле.
open ( $h, '>', 'old_file.dat' );
foreach my $rec ( grep {; defined } @data{ 1..$line_no } ) {
printf $h "%s\t%s\t%s\n", @$rec{qw<col1 col2 data>};
}
Но вы действительно никому не помогли.