标题: [文本处理] 批处理如何将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
- 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
- @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
- )
- 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越学越笨拙了......................
- @echo off
- set "t=-1"
- for /f "tokens=1* delims=:" %%a in ('findstr /n ".*" 1.txt') do (
- set/a t+=1
- if not defined m (set m=%%b)
- )
- :ss
- if %t%==0 (echo %m%&pause)
- for /f "skip=%t% tokens=1* delims=:" %%i in ('findstr /n ".*" 1.txt') do (
- echo %%j
- set/a t-=1
- goto ss
- )
复制代码
[ 本帖最后由 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- f = "C:\\test\\1.txt"; //文件路径请用\\
- overWrite = 0; //是否替换原文件
-
- fso = new ActiveXObject("Scripting.FileSystemObject");
- if(!overWrite) f2=f+'.new.txt'; else f2=f;
- s=fso.OpenTextFile(f).ReadAll();
- s=s.split('\r\n').reverse().join('\r\n');
- fso.OpenTextFile(f2,2,true).Write(s);
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |