Having worked with a lot of fixed-length data (Fortran output), I've done it like this:
#!/usr/bin/perl
use strict;
use warnings;
<DATA>; <DATA>; # skip header lines
while (<DATA>) {
my @fields = / (.{51}) (.{21}) (.{21}) (.{21}) (.+) /x or next;
my @fields_nospace = map {/^\s*(.+?)\s*$/; $1} @fields;
print join ("\t", @fields_nospace), "\n";
}
__DATA__
(your data here)
Output:
N-20070143.003.TXT 05/23/07 02:36:59 PM 13 13 0
N-20070143.004.TXT 05/23/07 04:48:56 PM 1 1 0
N-20070143.006.TXT 05/23/07 04:48:56 PM 16 16 0
N-20070143.008.TXT 05/23/07 04:48:58 PM 19 19 0
N-20070143.009.TXT 05/23/07 04:48:59 PM 1 1 0
N-20070143.010.TXT 05/23/07 04:49:00 PM 5 4 1
N-20070143.012.TXT 05/23/07 04:49:00 PM 18 18 0
N-20070143.013.TXT 05/23/07 04:49:02 PM 20 20 0
N-20070143.015.TXT 05/23/07 04:49:03 PM 53 53 0
N-20070143.011.TXT 05/24/07 04:35:48 PM 5 5 0
N-20070152.040.TXT 06/18/07 04:03:26 PM 25 21 4