題 如何在Windows中反轉文本文件


請幫助我,如何在Windows中批量反向/排序文本文件中的行?
例:
我有這種格式的文字

15/04 / 2013-07:10:3​​0 lalala
  15/04 / 2013-07:10:3​​0文字文字
  15/04 / 2013-07:10:3​​0 1 lala Text

  15/04 / 2013-07:10:3​​6 8文本lala X.
  15/04 / 2013-07:10:3​​6文本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:3​​6文本lala 1
  15/04 / 2013-07:10:3​​6 8文本lala X.
  15/04 / 2013-07:10:3​​0 1 lala Text
  15/04 / 2013-07:10:3​​0文字文字
  15/04 / 2013-07:10:3​​0 lalala
  ......(其他行)

謝謝您的幫助!


4
2018-04-15 10:47


起源


為何批量?你喜歡疼嗎?任何像樣的腳本語言都不超過10行。 - David Heffernan
其他語言(c ++,java,perl,VB,...)我不明白:/
我在想一種腳本語言。我個人最喜歡的是Python。其他人喜歡Perl或Ruby或Lua。還有其他人。甚至VBscript也比批量更好。 - David Heffernan
重複 superuser.com/questions/582996 - Karan
可能重複 superuser.com/questions/748387/... ? - Charles Burge


答案:


也許這不是最漂亮的方式,但它只是簡單而且可以按照你的意願工作。

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


13
2018-04-15 11:33



想像一下大文件需要多長時間!這感覺就像河內的文字處理塔! - David Heffernan
好吧,我說這不是最好的方式。我剛剛提出了處理小文件的簡單想法。這是他的問題,他想使用批處理這樣的操作:)在我看來最糟糕的選擇。
我編輯了我的帖子。與第一個相比,新代碼要快得多。
尼斯。有一個+1。批量只是受虐狂。 - David Heffernan
GHOST:工作得很好!這就是我需要的。謝謝您的幫助。


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

請注意,在Windows上,您必須使用雙引號而不是單引號來分隔perl字符串。


2
2018-01-20 11:02



Windows沒有 perl 命令。該問題指定Windows。
其他三個人在這裡提到perl所以我認為它沒問題。 - Kjetil S.
本網站的答案必須是獨立的。這意味著您有義務提到perl未包含在Windows中,並且可選地包含下載和安裝它的超鏈接。但最重要的是,您應該已經說明了使用perl運行腳本的先決條件。
我的Windows系統上有perl,所以這很方便。 - Matthew Lock
謝謝 - 儘管有書本投訴,但這是最好的答案。 - Michael Burr


我想我會把它作為第二種方法添加,因為它可能對某些人更好:

如果您對可以調用的內容持開放態度,而不是批處理邏輯:

這是一個.NET應用程序 你下降到%Systemroot%並調用就像批量,.bat,.cmd等任何其他命令一樣。1

用法如下: 反轉“C:\ Path \ File.txt”  enter image description here

而且,是的,我擁有這個東西。我寫這個比寫邏輯更容易。它至少會替換文件內容,而不是創建第二個文件。


1
2018-04-15 14:11



就個人而言,我很快就會使用* nix工具。例如 tac 完全符合你的需要。真的沒有必要重新發明輪子。 - David Heffernan
Tac不是Windows工具,因此仍然需要某種形式的加載項。 - Austin T French
當然它不是Windows的一部分。但它是GNU工具的一部分,沒有它們誰能活下去? - David Heffernan
這不適用於非常大的文件 - 顯然將整個文件讀入內存。 - Betty


sort / r yourfile.txt> out.txt

這將以反向字母順序排出yourfile.txt中的所有行。請注意,這可能與以實際相反的順序排出yourfile.txt中的所有行不同。


1
2018-04-26 23:33





正好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; }

-1
2017-12-07 14:48



你能提供一些關於這段代碼的解釋嗎?請參閱 怎麼回答。 - Burgi
歡迎來到超級用戶!雖然這可能會回答這個問題,但如果你能提供一些解釋,這將是一個更好的答案 為什麼 它這樣做。 - DavidPostill♦
請解釋一下perl腳本的確切功能。您還應該正確格式化腳本,請使代碼可讀,而不是使其緊湊。 - Ramhound
此外,Windows沒有PERL,因此您需要解釋為什麼在默認程序可行的情況下安裝額外軟件的必要性。 - music2myear