script help

Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

Threaded View

I wanted to read a file and select the first 2 characters and if they are 9A or
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

Re: script help

Quoted text here. Click to load it

What have you tried? I would probably use sysopen/read/write for this,

    perldoc -f sysopen
    perldoc -f sysread
    perldoc -f syswrite
    perldoc -f substr


Re: script help

Quoted text here. Click to load it

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:

use strict;
use warnings;
while( my $line = <DATA> ) {
  if( $line =~ /^[79]A/ ) {
    substr($line,18,5) = '00000';
    substr($line,25,5) = '00000';
  print $line;

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!

Jim Gibson

Re: script help

This is possible - can you please state your exact problem. Try to provide
possible input file and expected output file


On Saturday, 20 October 2012 03:07:03 UTC+5:30,  wrote:
Quoted text here. Click to load it

Re: script help

On Friday, October 19, 2012 5:37:03 PM UTC-4, wrote:
Quoted text here. Click to load it

Assuming that you have some kind of delimited file, you can do it like this (in

open infile
open outfile
while (<infile>)
  if(first two characters don't match /[79]A/)
  then write the line to the outfile
    convert the line to an array
    set the array elements [18-22][25-29] to 0
    join the array back to a line
    write the line to the outfile
close infile
close outfile

Site Timeline