Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

one-line split file sequence checker

by wdef2 (Acolyte)
on Jan 21, 2008 at 23:27 UTC ( #663473=snippet: print w/ replies, xml ) Need Help??

Description: Identify missing parts in a sequence of split files in the current dir eg file.1, file.03, file.005 etc => prints 2 and 4 I'm sure this could be made tighter, I'm still a Perl newbie.
perl -e 'for $c (sort {$a<=>$b} grep(s/^.+?([0-9]+)$/$1/, `ls *[0-9]`)){ ++$n == $c || print grep(s/$/\n/, $n...$c-1) ; $n=$c }'
Comment on one-line split file sequence checker
Download Code
Re: one-line split file sequence checker
by jwkrahn (Monsignor) on Jan 22, 2008 at 21:09 UTC
    "tighter" sure, change  grep(s/^.+?([0-9]+)$/$1/, to  map(/.([0-9]+)$/, and change  `ls *[0-9]` to  <*[0-9]> and change  grep(s/$/\n/, to  map("$_\n", .

      You can make map(/.([0-9]+)$/, into map(/.(\d+)$/, too.

        perl -e 'for $c (sort {$a<=>$b} map(/.(\d+)$/, <*[0-9]>)){ ++$n == $c || print map("$_\n", $n...$c-1) ; $n=$c }'

        Ah, that's getting closer to the line noise effect I was looking for, thanks ;=) Time to read up on that map command and why <> is globbing filenames in the current dir. I'm almost pleased to see there's no offered improvement to the basic idea. There's no way to get rid of that 'for' iterator, or the 'print'? -lane ? Any shorthand for sort {$a<=>$b}? Just wondering.
Re: one-line split file sequence checker
by poolpi (Hermit) on Jan 24, 2008 at 13:28 UTC
    With files :
    file.1 file.02 file.003 file.5 file.00007 file.011
    perl -e '/\.0*(\d+)$/and$t[$1]=1for<*>;map{$t[$c]?1:print"$c ";$c++}@t'
    Output :
    4 6 8 9 10

    HTH,

    PooLpi

    'Ebry haffa hoe hab im tik a bush'.  Jamaican proverb
      Nice, thx. Could golf slightly further I suppose to:

      perl -e '/(\d+)$/and$t[$1]=1for<*>;while($c<$#t){$t[++$c]||print "$c "}'

      I like that since it seems quite readable as well (at least for me) Though is map more efficient than while?

        map may or may not be more efficient, but it's certainly shorter:

        perl -le '/(\d+)$/and$t[$1]=1for<*>;map$t[$_]||print,1..$#t'
Re: one-line split file sequence checker
by ambrus (Abbot) on Jan 25, 2008 at 09:26 UTC

Back to Snippets Section

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: snippet [id://663473]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others browsing the Monastery: (13)
As of 2014-12-22 21:32 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (131 votes), past polls