I wanted to read a file and select the first 2 characters and if they are 9A
or 7A
I want to zero out columns 18 to 22 and 25 to 29.
If this can be done in Perl and Bash.
Can someone assist please. thanks
Is your file text or binary? What do you mean by "zero out"?
Assuming that 1) your are talking about ASCII text and 2) the
replacement characters are ASCII '0', here is a short program that
demonstrates testing each line, replacing characters in the line
depending upon what the first two characters are, and printing the
result. If you mean something else, please let us know:
#!/usr/bin/perl
use strict;
use warnings;
while( my $line = <DATA> ) {
if( $line =~ /^[79]A/ ) {
substr($line,18,5) = '00000';
substr($line,25,5) = '00000';
}
print $line;
}
__DATA__
1234566890123456689012345668901234566890
7A34566890123456689012345668901234566890
8234566890123456689012345668901234566890
9A34566890123456689012345668901234566890
x9A34566890123456689012345668901234566890
1234566890123456689012345668901234566890
abcdefghijklmnopqrstuvwxyz0123456789
This program uses the magic <DATA> file read operator to read data
lines from the end of the program. In a real program, you would open an
external file using the open function:
open( my $in, '<', $myfile ) or die("Can't open $myfile: $!");
and then use $in in the read operation:
while( my $line = <$in> ) {
You would also want to open a new file:
open( my $out, '>', $newfile ) or
die("Can't open $newfile for writing: $!");
and print to the new file handle instead of system output:
print $out $line;
See if you can put all of that together and write your own program.
Post your program here if you have problems.
Good luck!