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.
In reply to Re^3: Easiest way to filter a file based on user input (updated)
by haukex
in thread Easiest way to filter a file based on user input
by Peter Keystrokes
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |