Hi, currently i am developing a script for the input file, the contents are like this:

 abcd1234 1002 abcd1235 9920 abcd1236 8272 abf123 262 abf124 8172 ach37 888 ach38 990

but in the waiver file, the contents are like this:

 abc* 250 ac* 750

in the waiver file, the *sign is the input, so my perl script must able to read this symbol, and come out with grepping the remaining all characters behind if the strings before is matched. So, whatever inside the waiver file, the output should be change to value in waiver file

 abcd1234 250 abcd1235 250 abcd1236 250 abf123 262 abf124 8172 ach37 750 ach38 750

Anyone has any ideas? Since the symbol * is in the input file, not as always in perl script which the computer itself can understand, so how i can write the script to get the results? I am still new to perl

Update:

Hi, currently i am developing a script for the input file, the contents are like this:

func c4_2060/bump 250.00 2000.00 -1750.00 ( +VIOLATED) func c4_2061/bump 250.00 2000.00 -1750.00 ( +VIOLATED) func c4_2062/bump 250.00 2000.00 -1750.00 ( +VIOLATED) func c4_2063/bump 250.00 2000.00 -1750.00 ( +VIOLATED) func c4_2064/bump 250.00 2000.00 -1750.00 ( +VIOLATED) func c4_2065/bump 250.00 2000.00 -1750.00 ( +VIOLATED) and so on..

but in the waiver file, the contents are like this:

c4_2*/bump,250.00,2000.00,"Justification","Waived,by","Waived,Date","A +pproved,by","Approved,date" c4_2070/bump,250.00,2500.00,"Justification","Waived,by","Waived,Date", +"Approved,by","Approved,date"

in the waiver file, the *sign is the input, so my perl script must able to read this symbol, and come out with grepping the remaining all characters behind if the strings before is matched. So, whatever inside the waiver file, the output should be change to value in waiver file

func c4emib_2060/bump 250.00 2000.00 -17 +50.00 (WAIVED) func c4emib_2061/bump 250.00 2000.00 -17 +50.00 (WAIVED) func c4emib_2062/bump 250.00 2000.00 -17 +50.00 (WAIVED) func c4emib_2063/bump 250.00 2000.00 -17 +50.00 (WAIVED) func c4emib_2064/bump 250.00 2000.00 -17 +50.00 (WAIVED) func c4emib_2065/bump 250.00 2000.00 -17 +50.00 (WAIVED) func c4emib_2066/bump 175.00 2000.00 -18 +25.00 (WAIVED) func c4emib_2067/bump 250.00 2000.00 -17 +50.00 (WAIVED) func c4emib_2068/bump 250.00 2000.00 -17 +50.00 (WAIVED) func c4emib_2069/bump 250.00 2000.00 -17 +50.00 (WAIVED) func c4emib_2070/bump 250.00 2000.00 -17 +50.00 (WAIVED) func c4emib_2071/bump 250.00 2000.00 -17 +50.00 (WAIVED) func c4emib_2072/bump 250.00 2000.00 -17 +50.00 (VIOLATED) func c4emib_2073/bump 250.00 2000.00 -17 +50.00 (VIOLATED) func c4emib_2074/bump 250.00 2000.00 -17 +50.00 (VIOLATED) func c4emib_2075/bump 250.00 2000.00 -17 +50.00 (VIOLATED)

my code is like this

#! /tools/perl/5.8.8/linux/bin/perl use strict; use warnings; use Data::Dumper; # Source script my $report = $ARGV[1] ; my $waiver = $ARGV[3] ; my $result = $ARGV[5] ; # Set up a hash to receive the information my %identifier = (); # Read the violations file into the hash open my $filter, '<', $waiver or die; while (my $vline = <$filter>) { next unless $vline =~ /\S/; #skip blank lines my ($pins2, $threshold2, $newthreshold2) = split /,/, $vline; #$pins2 =~ s/\*/.*/g; $identifier{$pins2}{'threshold2'} = $threshold2; $identifier{$pins2}{'newthreshold2'} = $newthreshold2; } print Dumper \%identifier; # Read input file line by line and compare 2 files open my $input, '<', $report or die; open my $output, ">", $result or die; while (my $wline = <$input>){ my ($scenario, $pins1, $threshold1, $newthreshold1, $diff, $status +) = split /\s+/, $wline; # overwrite values if match if (exists $identifier{$pins1}) { if ( ($threshold1 == $identifier{$pins1}{'threshold2'}) && ($newth +reshold1 <= $identifier{$pins1}{'newthreshold2'}) ) { $status = '(WAIVED)'; } } printf $output "%-44s %-24s %-8s %-8s %-8s %-10 +s\n", $scenario, $pins1, $threshold1, $newthreshold1, + $diff, $status; } close $filter; close $input; close $output;

Anyone has any ideas? Since the symbol * is in the input file, not as always in perl script which the computer itself can understand, so how i can write the script to get the results? I am still new to perl

2017-07-26 Athanasius restored original content


In reply to Grep asterisk sign in input file by DespacitoPerl

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.