This may seem to be a very naive approach, but what about simply removing lines where X is going down compared to previous values? Something like this:
use strict;
use warnings;
my $previous_x = 0;
while (<DATA>) {
my ($x, $y) = split;
next if $x < $previous_x;
$previous_x = $x;
print;
}
__DATA__
0.0036759 0.4018006
0.0036962 0.4074616
0.0037064 0.4124646
[rest of input data omitted for brevity]
Output:
0.0036759 0.4018006
0.0036962 0.4074616
0.0037064 0.4124646
0.0037064 0.4216399
0.0037166 0.4351084
0.0037166 0.4438854
0.0037268 0.4518142
0.0037268 0.4628417
0.0037370 0.4730210
0.0037370 0.4832176
0.0037370 0.4894152
0.0037471 0.4952320
0.0037675 0.4979326
0.0037879 0.5014988
0.0038082 0.5057747
0.0038184 0.5166984
0.0038286 0.5332830
0.0038286 0.5613627
0.0038388 0.6026338
0.0038591 0.6216075
0.0038693 0.6343489
0.0038693 0.6420872
0.0038693 0.6536515
0.0038693 0.6709805
0.0038795 0.6808655
0.0038897 0.6866130
0.0039202 0.6981425
0.0039406 0.7057251
0.0039610 0.7105550
0.0039610 0.7216518
0.0039712 0.7329564
0.0039712 0.7433434
0.0039813 0.7482426
0.0039813 0.7577987
0.0039915 0.7713018
0.0040119 0.7911064
0.0040119 0.8014242
0.0040221 0.8074314
0.0040221 0.8130404
0.0040221 0.8210730
0.0040221 0.8264223
0.0040526 0.8290191
0.0040628 0.8323083
0.0040933 0.8361688
0.0041035 0.8409814
0.0041239 0.8466942
0.0041239 0.8591068
0.0041341 0.864785
0.0041443 0.8760895
0.0041544 0.8858707
0.0041646 0.8995296
0.0041748 0.9034420
0.0041748 0.9111804
0.0041748 0.9187110
0.0041850 0.9221387
0.0041850 0.9288903
0.0041850 0.9357977
0.0041952 0.9453537
You might also change the relevant code line to:
next if $x <= $previous_x;
if you want to remove duplicate X values.