in reply to
Modify a txt file
This one uses the new(ish) treat-strings-as-file-handles feature (See Effective Perl Programming)
my $data = q(0 ASDF
ASEE
ASEE
13 DERG
DREG
28 QWER
QWER
42 WERT
WERT
WERT
55 QWEASD
QWEASD
QWEASD
QWEASD
);
open $hndl , "<", \(my $s = $data);
open $out , ">", \(my $formatted = '');
my $substitute_field;
READ_FILE:
while (my $line = <$hndl>) {
chomp $line;
## Ignore any lines that don't contain relevant text
$line =~ /\S+/ or next READ_FILE;
$line =~ /^\s*(\d+)(\s+)([A-Z]+)/ and do {
$substitute_field = $1;
print $out $substitute_field, $2 ,$substitute_field,"\n";
next READ_FILE;
};
## If we don't have a field to substitute move on
defined $substitute_field or next READ_FILE;
## Must have valid line
$line =~ s/^(\s*)([A-Z]+)/$1$substitute_field/;
print $out $line,"\n";
}
print $formatted;
close $hndl;
close $out;
In:
0 ASDF
ASEE
ASEE
13 DERG
DREG
28 QWER
QWER
42 WERT
WERT
WERT
55 QWEASD
QWEASD
QWEASD
QWEASD
out:
0 0
0
0
13 13
13
28 28
28
42 42
42
42
55 55
55
55
55