in reply to Re^2: Easiest way to filter a file based on user input
in thread Easiest way to filter a file based on user input
So for example, if the user enters -3, all the lines in the file that begin with a numerical value that is greater than 3 will be excluded. Or if the user enters the value 1, all lines beginning with a value greater than 1 will be excluded.
So based on that description, the user entering -3 is the same as entering 3?
#!/usr/bin/env perl use strict; use warnings; print "Enter limit: "; chomp( my $limit = <STDIN> ); $limit = abs($limit); open my $in, '<', "file.hairpin" or die $!; open my $sifted, '>', "new_file.hairpin" or die $!; while (<$in>){ next if /^None/; next if /^(\d+)/ && $1 > $limit; print $sifted $_; } close $in; close $sifted;
Or as a oneliner (where "123" is the limit):
perl -ne 'print unless /^None/ || ( /^(\d+)/ && $1>123 )' file.hairpin + >new_file.hairpin
As for your code here, it looks like you don't need to collect your lines in arrays but can write them to the output file directly (or, at the very least you don't need to open your output file once per line of output).
Update: I just noticed that the sample input in the OP includes decimals and negative numbers, so you'd have to adjust the regex in my example code above accordingly. But before you try to develop really complex regexes, have a look at Regexp::Common::number.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^4: Easiest way to filter a file based on user input (updated)
by Peter Keystrokes (Beadle) on Jul 07, 2017 at 16:24 UTC | |
by hippo (Archbishop) on Jul 07, 2017 at 16:44 UTC | |
by Peter Keystrokes (Beadle) on Jul 10, 2017 at 12:55 UTC | |
by hippo (Archbishop) on Jul 10, 2017 at 13:05 UTC | |
by Peter Keystrokes (Beadle) on Jul 16, 2017 at 09:14 UTC | |
| |
|
Re^4: Easiest way to filter a file based on user input (updated)
by Peter Keystrokes (Beadle) on Jul 07, 2017 at 14:51 UTC |