Humm... tem certeza que não usa a memória? <br><br>Provavelmente ele deve usar um merge sort para ordernar os pedacinhos juntos. Vou ler mais antes de falar alguma coisa.<br><br>De qualquer forma, valeu a dica!<br><br><br>
thiago_yukio++ #<br><br><br><br><div class="gmail_quote">2011/7/26 Thiago Yukio Kikuchi Oliveira <span dir="ltr"><<a href="mailto:stratust@gmail.com">stratust@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Fazer o 'sort' de arquivos gigantes está sendo o problema da bioinformática ultimamente<br>(cada sequencia que eu recebo é um arquivo texto com 15GB de informação cada).<br><br>Perl não dá conta de fazer o sort pois faz tudo em memória. Além disso, apesar de termos memória o suficiente (128GB) ela não é tão rápida quanto um programa em C específico para sorting.<br>


<br>No seu caso eu recomendo usar o sort do linux. No exemplo  abaixo estou usando a data de modificação para ordenar:<br><br><br>[stratus@darkside test]$ ls -lh<br>total 0<br>-rw-r--r-- 1 stratus users 0 Jul 26 12:09 a.txt<br>


-rw-r--r-- 1 stratus users 0 Aug 11  2009 b.txt<br>-rw-r--r-- 1 stratus users 0 Dec 11  2008 c.txt<br>-rw-r--r-- 1 stratus users 0 Dec 11  2008 d.txt<br><br>[stratus@darkside test]$ ls -l --time-style=long-iso | sort -k6,6 -k7,7n<br>


total 0<br>-rw-r--r-- 1 stratus users 0 2008-12-11 01:00 c.txt<br>-rw-r--r-- 1 stratus users 0 2008-12-11 01:30 d.txt<br>-rw-r--r-- 1 stratus users 0 2009-08-11 01:00 b.txt<br>-rw-r--r-- 1 stratus users 0 2011-07-26 12:09 a.txt<br>


<br>Se precisar renomear o arquivo, vc pode usar perl apos o comando por exemplo:<br><br>[stratus@darkside test]$ ls -l --time-style=long-iso | sort -k6,6 -k7,7n | perl -lane 'next unless $F[7]; $i++; print "$F[7] -> $i.txt" '<br>


c.txt -> 1.txt<br>d.txt -> 2.txt<br>b.txt -> 3.txt<br>a.txt -> 4.txt<br><br>Obs: O sort do unix não usa memória , porem ele cria os arquivos de indexação no /tmp.<br>Se o /tmp for uma partição menor que o arquivo que está sendo ordenado, ele vai apresentar segmentation fault. Isso já aconteceu comigo.<br>


Se for o seu caso, vc pode mudar a partição que o sort usa, mudando a variavel de ambiente antes de usar o sort:<br><br>export $TMPDIR=/your/path<br><br>Para arquivos de 9GB o sort deve demorar mais de meia hora. Se você for utilizar isso com frequencia, dê uma olhana no nsort (<a href="http://www.ordinal.com/" target="_blank">http://www.ordinal.com/</a>)<br>


<br>Ele não é free, porém é muito rápido (ordena 1TB em 33 minutos)<br><br>E você pode baixar uma versão de testes por 30 dias.<br><br><br><br clear="all">    /    Thiago Yukio Kikuchi Oliveira<br>(=\  <br>  \=) Faculdade de Medicina de Ribeirão Preto<br>


   /   Laboratório de Genética Molecular e Bioinformática<br>  /=) -----------------------------------------------------------------<br>(=/   Centro de Terapia Celular/CEPID/FAPESP - Hemocentro de Rib. Preto<br>  /    Rua Tenente Catão Roxo, 2501 CEP 14151-140<br>


(=\   Ribeirão Preto - São Paulo<br>  \=) Fone: 55 16 2101-9300   Ramal: 9603<br>   /   E-mail: <a href="mailto:stratus@lgmb.fmrp.usp.br" target="_blank">stratus@lgmb.fmrp.usp.br</a><br>  /=)            <a href="mailto:stratust@gmail.com" target="_blank">stratust@gmail.com</a><br>


(=/  <br>  /    Bioinformatic Team - BiT: <a href="http://lgmb.fmrp.usp.br" target="_blank">http://lgmb.fmrp.usp.br</a><br>(=\   Hemocentro de Ribeirão Preto: <a href="http://pegasus.fmrp.usp.br" target="_blank">http://pegasus.fmrp.usp.br</a><br>
  \=)<br>

   /  -----------------------------------------------------------------<br>
<br><br><div class="gmail_quote"><div class="im">2011/7/26 Andre Carneiro <span dir="ltr"><<a href="mailto:andregarciacarneiro@gmail.com" target="_blank">andregarciacarneiro@gmail.com</a>></span><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div><div></div><div class="h5">

Salve!<br><br>Tenho que ordenar 3 milhões de arquivos de um diretório(e isso tende a aumentar). Mesmo que eu mova parte dos arquivos para outros diretórios, ainda assim vai sobrar arquivo pra caramba.<br><br>Desse modo, eu pesquisei no perlmonks e outros lugares, e achei esse código abaixo que até resolveria, se não fosse o problema de memória, pois usa uma quantidade de memória proporcional a quantidade de arquivos.<br>



<br><br><code><br><br>#!/usr/bin/perl <br><br>use strict;<br>use warnings;<br>use DateTime;<br><br>my $start_time = time;<br><br>my %times = ();<br><br>opendir DIR, $ARGV[0] or die "Couldn't open $ARGV[0]; $!\n";<br>



<br>my @sorted =<br>sort {<br>    $times{$b} cmp $times{$a}; # Was cmp D'oh! Thanks [dws]<br>}<br>map {<br>$times{$_} = (stat $_)[9]; $_;<br>} readdir DIR;<br><br>closedir DIR or warn "Couldn't close $ARGV[0]; $!\n";<br>



local $" = $/;<br>print "@sorted\n";<br><br>my $end_time = time;<br><br>my $enlapsed_time = $end_time - $start_time;<br><br>my $dt = DateTime->from_epoch( epoch => $enlapsed_time );<br><br>my $etime = $dt->hms(':');<br>



<br>print "\nCrapy time: $etime\n";<br><br clear="all"></code><br><br>Alguém conhece um algoritmo onde, sei lá, eu pudesse ordernar parte desses arquivos  e de depois juntar tudo de alguma forma, ou algo desse tipo?<br>



<br>Thx!<br><font color="#888888"><br><br>-- <br>André Garcia Carneiro<br>Analista/Desenvolvedor Perl<br>(11)82907780<br>
</font><br></div></div><div class="im">=begin disclaimer<br>
   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>
 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
<br></div></blockquote></div><br>
<br>=begin disclaimer<br>
   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a><br>
 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
<br></blockquote></div><br><br clear="all"><br>-- <br>André Garcia Carneiro<br>Analista/Desenvolvedor Perl<br>(11)82907780<br>