Board logo

标题: [文本处理] 批处理如何将txt文本的内容倒序/反转? [打印本页]

作者: mrhxn    时间: 2010-10-1 21:47     标题: 批处理如何将txt文本的内容倒序/反转?

本帖最后由 pcl_test 于 2016-9-3 20:00 编辑

一个文本文件,如何将最后一行变成第一行,依次类推,比如一个文件有100行,100行变第一行,99行变第二行.......第一行变第100行,第二行变99行,即倒过来按顺序排一下.
作者: asnahu    时间: 2010-10-1 22:57

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


gawk为第三方软件,本论坛有下载。

[ 本帖最后由 asnahu 于 2010-10-1 23:17 编辑 ]
作者: mrhxn    时间: 2010-10-1 23:15

谢谢,不过没有搜到GAWK,能不能不用第三方软件,用for之类的能不能实现?
作者: edmond    时间: 2010-10-1 23:15

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set t=2147483648
  4. for /f  %%a in (1.txt) do (
  5. set _!t!%%a=%%a
  6. set/a t-=1
  7. )
  8. for /f "tokens=2 delims=="  %%i in ('set _') do (
  9. echo %%i>>tem.txt
  10. )
  11. pause
复制代码

作者: mrhxn    时间: 2010-10-1 23:46

原帖由 edmond 于 2010-10-1 23:15 发表
@echo off
setlocal enabledelayedexpansion
set t=2147483648
for /f  %%a in (1.txt) do (
set _!t!%%a=%%a
set/a t-=1
)
for /f "tokens=2 delims=="  %%i in ('set _') do (
echo %%i>>tem.txt
)
pa ...




实现了,谢谢,不过2147483648是什么意思,改成其它的好像就不对了.
作者: edmond    时间: 2010-10-2 00:01

批处理运算能处理的最大数值
如果你的行数超过了2147483648 以上代码就不行了
改小是可以的


意思是你文本里需要处理最多的行数
作者: mrhxn    时间: 2010-10-2 00:05

我只有100行,改成100后,次序就乱了,改回正常了.
作者: edmond    时间: 2010-10-2 00:54

变量排序的方法是从左到右从小到大(前面三位),后面的可以作为一个数值排
你输入100后的排序是百位排好后再排十位然后个位这样的
自然就乱了

我记得是这样的
如果高手在的话,最好能够请高手详细说明,以免产生误导

[ 本帖最后由 edmond 于 2010-10-2 01:04 编辑 ]
作者: Batcher    时间: 2010-10-2 12:29     标题: 回复 3楼 的帖子

第三方命令行工具 gawk.exe 下载地址:
http://bbs.bathome.net/thread-3981-1-1.html
作者: Batcher    时间: 2010-10-2 12:48

批处理行倒序输出文件内容
http://bbs.bathome.net/thread-4127-1-1.html
作者: Batcher    时间: 2010-10-2 12:50     标题: 回复 4楼 的帖子

你内容找个包含感叹号的文件试试?
作者: edmond    时间: 2010-10-2 15:13

回复11楼batcher,谢谢提醒
确实无法实现感叹号的问题,关于变量延迟还得仔细潜一下啊,下面写了个不用延迟的,就是效率太差了,
现在好像对bat越学越笨拙了......................
  1. @echo off
  2. set "t=-1"
  3. for /f  "tokens=1* delims=:" %%a in ('findstr /n ".*" 1.txt') do (
  4.   set/a t+=1
  5.   if not defined m (set m=%%b)
  6. )
  7. :ss
  8. if %t%==0 (echo %m%&pause)
  9. for /f "skip=%t% tokens=1* delims=:"  %%i in ('findstr /n ".*" 1.txt') do (
  10. echo %%j
  11. set/a t-=1
  12. goto ss
  13. )
复制代码

[ 本帖最后由 edmond 于 2010-10-2 22:53 编辑 ]
作者: Batcher    时间: 2010-10-2 15:20     标题: 回复 12楼 的帖子

Q: 如何用code把代码括起来?
A: http://bbs.bathome.net/thread-404-1-1.html

参考:批处理之家论坛使用常见问题FAQ
http://bbs.bathome.net/thread-3473-1-1.html
作者: powerbat    时间: 2010-10-2 15:34

来个JS
  1. f = "C:\\test\\1.txt"; //文件路径请用\\
  2. overWrite = 0; //是否替换原文件
  3. fso = new ActiveXObject("Scripting.FileSystemObject");
  4. if(!overWrite) f2=f+'.new.txt'; else f2=f;
  5. s=fso.OpenTextFile(f).ReadAll();
  6. s=s.split('\r\n').reverse().join('\r\n');
  7. fso.OpenTextFile(f2,2,true).Write(s);
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2