如何在 Windows 中反转文本文件

如何在 Windows 中反转文本文件

请帮我看看如何在 Windows 中使用批处理反转/排序文本文件中的行?
例如:
我有这种格式的文本

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

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

17/04/2013-10:11:12 B bext lala 4
... (其他行)

我需要将其反转为这种格式

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
... (其他行)

感谢您的帮助!

答案1

这可能不是最漂亮的方法,但它很简单并且可以按您想要的方式工作。

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

如果您要处理大文件,请不要使用上述示例。这确实是一个耗时耗力的解决方案。这里有我刚刚准备的更快版本:

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
)

在我的计算机上,逆向 40kb 文件(10k 行,每行 1 个字符)大约需要 1 分钟。请记住,这仍然只是批处理。有许多更好的脚本或编程语言可以更好地执行该操作。

答案2

perl -e "print reverse <>" file > file_reversed

请注意,在 Windows 上,您必须使用双引号而不是单引号来分隔 perl 字符串。

答案3

我想我会将其添加为第二种方法,因为它可能对某些人更有效:

如果您愿意接受某些可以调用的东西,而不是批处理逻辑:

这是一个 .NET 应用程序将其放到 %Systemroot% 并像批处理、.bat、.cmd 等中的任何其他命令一样调用它。1

用法如下:逆向“C:\Path\File.txt” 在此处输入图片描述

是的,我拥有这个东西。对我来说,调用它比写出逻辑更容易。它将替换文件内容,至少目前如此,并且不会创建第二个文件。

答案4

正好 10 行 perl,考虑到如果输出文件已经存在则什么也不会做:

#!/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; }

相关内容