Poisson
Poisson

Reputation: 1623

redirection of the result in a file text

I do a perl scrip that it creates a hash directly from the contents of the first file, and then reads each line of the second, checks the hash to see if it should be printed.

Here is the perl script :

use strict;
use warnings;
use autodie;

my %permitted = do {
open my $fh, '<', 'f1.txt';
map { /(.+?)\s+\(/, 1 } <$fh>;
};

open my $fh, '<', 'f2.txt';
while (<$fh>) {
my ($phrase) = /(.+?)\s+->/;
print if $permitted{$phrase};
}

I am looking for how i print the result in a file text because this script actually print the result on the screen.

Thank you in advance.

Cordially

Upvotes: 0

Views: 80

Answers (3)

Kenosis
Kenosis

Reputation: 6204

mapping the file contents first produces a list of all of the file's lines. This isn't necessarily a bad thing, unless the file's substantially large. grebneke showed how to direct output to a file, using > result.txt. Given this, and the (possible) map issue, consider just passing both files to the script from the command line, and process them using whiles:

use strict;
use warnings;

my %permitted;

while (<>) {
    $permitted{$1} = 1 if /(.+?)\s+\(/;
    last if eof;
}

while (<>) {
    print if /(.+?)\s+->/ and $permitted{$1};
}

Usage: perl script.pl f1.txt f2.txt > result.txt

Hope this helps!

Upvotes: 2

user2410502
user2410502

Reputation:

Open a new filehandle in write mode, then print to it. See perldoc -f print or http://perldoc.perl.org/functions/print.html for more info

...
open my $fh, '<', 'f2.txt';
open my $out_fh, '>', 'output.txt';
while (<$fh>) {
  my ($phrase) = /(.+?)\s+->/;
  print $out_fh $_
      if $permitted{$phrase};
}

Upvotes: 2

grebneke
grebneke

Reputation: 4494

$ perl thescript.pl > result.txt

Will run your script and put the printed output in result.txt

Or, from within the script itself:

use strict;
use warnings;
use autodie;

my %permitted = do {
    open my $fh, '<', 'f1.txt';
    map { /(.+?)\s+\(/, 1 } <$fh>;
};

# Open result.txt for writing:
open my $out_fh, '>', 'result.txt' or die "open: $!";

open my $fh, '<', 'f2.txt';
while (<$fh>) {
    my ($phrase) = /(.+?)\s+->/;
    # print output to result.txt
    print $out_fh $_ if $permitted{$phrase};
}

Upvotes: 2

Related Questions