[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]批处理如何将文本内容行倒排序?

批处理如何将文本内容行倒排序?并输出到另外文本里

例如原文本内容:
2222
222v飞v
342
不同提供343

处理后:
不同提供343
342
222v飞v
2222
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

  1. gawk "{a[NR]=$0}END{for(i=NR;i>=1;i--)print a[i]}" a.txt
复制代码

TOP

哈哈 虽然这个已经解决了但是看到了 还是要给个好方法的。
  1. REM :: 打开变量延迟
  2. @Echo Off&SetLocal EnableDelayedExpansion
  3. REM :: 设定一个增值变量值为0
  4. Set Varn=0
  5. REM :: 首次循环判断文本中一共有多少行,并将每一行赋值于一个变量。
  6. For /f %%a in (1.txt) do (
  7. Set Vara=%%a
  8. Set /a Varn+=1
  9. Set "Var!Varn!=!Vara!"
  10. )
  11. REM :: 反过来将变量输出
  12. For /l %%b in (%Varn%,-1,1) do (
  13. Echo !Var%%b!
  14. )
  15. Pause
复制代码
不管文本中有多少行,如果行的内容比较复杂的话就要在第一个循环的For命令加上tokens=*参数

TOP

顶顶顶顶顶顶顶

TOP

17# Hello123World


Windows的sort命令不会按照我们的想法去排序的
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

  1. sort /r 111.txt >hello.txt
  2. start "" "hello.txt"
复制代码

TOP

另外一种,以前经常用的:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in (a.txt) do (
  3.      set /a n+=100001
  4.      echo !n:~-6!:%%a
  5. )>tmp
  6. (for /l "tokens=1* delims=:" %%a in ('sort /r tmp') do echo %%b)>2.txt
  7. del tmp
  8. start a.txt
复制代码
但是碰到大文件时,for两遍的效率会很低

TOP

14# wc726842270
处理超大文本不考虑效率是不行的,如果文本足够大,你这个代码估计最后没有结果出来。。。
***共同提高***

TOP

我也凑凑热闹,好久没发贴子了,都快忘了,呵呵
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1* delims=:" %%i in ('findstr /n .* 1.txt') do set
  3. str=%%i&&set _!str!=%%j&set /a n+=1
  4. :1
  5. echo !_%n%!
  6. set /a n-=1
  7. if %n% equ 0 (pause&goto :eof) else goto :1
复制代码
枫中残雪:风停了,我的心却在动,让我心中的寒意走向远方

TOP

12# batman


我以为只有我才常干这种事。。。
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

本帖最后由 batman 于 2011-4-27 01:25 编辑

9# wh1234567
代码中少写了一个do,笔误,已改正,应该能处理了。

你如果不是小白应该能够发现这个问题改正啊,晕。。。。
***共同提高***

TOP

1# wh1234567
  1. tac a.txt | more > b.txt
复制代码
http://bbs.bathome.net/thread-1114-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

2# zm900612

这个可以正常处理,很感谢大家的帮助

TOP

8# batman

好像还是不能正常处理

TOP

本帖最后由 batman 于 2011-4-27 08:10 编辑

因为cmd中的变量名+值的字节数上限为8190,当文本足够大时,代码中的str变量就会发生溢出,修改如下:
  1. @echo off&setlocal enabledelayedexpansion
  2. set /a num=1
  3. for /f "delims=" %%a in (a.txt) do (
  4.      set /a n+=1,m=n%%100
  5.      if !m! equ 0 set /a num+=1
  6.      for %%b in (!num!) do set "str_%%b="%%a" !str_%%b!"
  7. )
  8. (for /l %%a in (%num%,-1,1) do (
  9.       for %%b in (!str_%%a!) do echo %%~b
  10. ))>tem
  11. del /q a.txt&ren tem a.txt
  12. start a.txt
复制代码
1

评分人数

***共同提高***

TOP

返回列表