Como inverter o arquivo de texto no Windows

4

Por favor, ajude-me, como inverter / classificar a linha no arquivo de texto com lote no Windows?
Exemplo:
Eu tenho texto neste formato

15/04/2013-07:10:30 lalala
15/04/2013-07:10:30 Text text
15/04/2013-07:10:30 1 lala Text

15/04/2013-07:10:36 8 text lala X
15/04/2013-07:10:36 A text lala 1

17/04/2013-10:11:12 B bext lala 4
... (other rows)

e preciso invertê-lo neste formato

17/04/2013-10:11:12 B bext lala 4
15/04/2013-07:10:36 A text lala 1
15/04/2013-07:10:36 8 text lala X
15/04/2013-07:10:30 1 lala Text
15/04/2013-07:10:30 Text text
15/04/2013-07:10:30 lalala
... (other rows)

Obrigado pela sua ajuda!

    
por Hennes 15.04.2013 / 12:47

5 respostas

13

Talvez não seja a maneira mais bonita, mas é simples e funciona como você deseja.

echo. > output.txt

for /f  "delims=@" %%j in (yourfile.txt) do (
    type output.txt > tmp
    echo %%j > output.txt
    type tmp >> output.txt
)

del tmp

Não use o exemplo acima para processar arquivos grandes. É realmente tempo e recursos consumindo solução. Aqui você tem uma versão mais rápida que acabei de preparar:

setlocal enabledelayedexpansion

set I=0

for /F "tokens=*" %%k in (yourfile.txt) do (
  set /A I=!I! + 1
  set LINE!I!=%%k
)

for /L %%c in (!I!,-1,1) do (
  echo !LINE%%c! >> out.txt
)

Reverter o arquivo de 40kb (10k linhas, 1 caractere em cada) demorou ~ 1 minuto na minha máquina. Lembre-se que ainda é apenas lote. Existem muitas linguagens de programação ou script melhores que seriam melhores para executar essa operação.

    
por 15.04.2013 / 13:33
2
perl -e "print reverse <>" file > file_reversed

Note que no Windows você terá que usar aspas duplas em vez de aspas simples para delimitar a string perl.

    
por 20.01.2017 / 12:02
1

Eu pensei em adicionar isso como uma segunda abordagem, já que pode funcionar melhor para alguns:

Se você estiver aberto a algo que possa chamar, em vez de lógica em lote:

Este é um aplicativo .NET que você solta para% Systemroot% e chama como qualquer outro comando em um lote, .bat, .cmd, etc. 1

O uso é semelhante a: Reverter "C: \ Caminho \ Arquivo.txt"

E, sim, eu possuo a coisa. Parece mais fácil para mim chamar isso do que escrever a lógica. Ele substituirá o conteúdo do arquivo, pelo menos no momento, e não criará um segundo arquivo.

    
por 15.04.2013 / 16:11
1

classifique / r seu arquivo.txt > out.txt

Isto irá colocar todas as linhas no seu arquivo.txt em ordem alfabética inversa. Note que isto pode ser diferente de colocar todas as linhas no seu arquivo.txt na ordem inversa real.

    
por 27.04.2013 / 01:33
-1

exatamente 10 linhas perl, levando em conta que nada será feito se o arquivo de saída já existir:

#!/usr/bin/perl
usage() if( !$ARGV[0] );
my $f_out = my $f_in = $ARGV[0];
$f_out =~ s/(\..{1,3})?$/.reverse$1/i;
open(TXTIN, "<$f_in") || usage("Can't read file [$f_in]");
my @in = <TXTIN>; close(TXTIN);
usage( "File already exists, nothing done [$f_out]" ) if( -e $f_out );
open(TXTOUT, ">$f_out"); print TXTOUT join( '', reverse( @in ) ); close(TXTOUT);
print "File reverse written [$f_out]\n";
sub usage { print "$_[0]\nUsage: [perl] rev2.pl (filename)\n"; exit; }
    
por 07.12.2016 / 15:48

Tags