标题: [文本处理] 批处理如何对txt文本里采用科学计数法表示的数字进行排序? [打印本页]
作者: xyq916 时间: 2016-4-22 17:21 标题: 批处理如何对txt文本里采用科学计数法表示的数字进行排序?
本帖最后由 pcl_test 于 2016-4-22 19:55 编辑
文本文档“1.txt”,里面的内容只有一列,这一列的最上面6行为标题、说明等文字内容,第7行开始到6342行为一列数字,
如何实现把这一列数字从大到小排序后输出到“2.txt”文本文档。数字采用科学计数法,这一列数字中有比较多的0项,- [Name]
- R1 Blade
-
- [Data]
- alum.Erosion Rate
- 0.00000000e+000
- 0.00000000e+000
- 0.00000000e+000
- 0.00000000e+000
- 2.11508553e-002
- 0.00000000e+000
- 4.23389673e-002
- 0.00000000e+000
- 1.69804394e-001
- 2.79017985e-001
- 2.89141804e-001
- 0.00000000e+000
- 1.37632385e-001
- 0.00000000e+000
- 3.52498561e-001
- 0.00000000e+000
- 0.00000000e+000
- 9.83318090e-002
- 4.75238204e-001
- 0.00000000e+000
- 0.00000000e+000
复制代码
作者: happy886rr 时间: 2016-4-22 18:58
本帖最后由 happy886rr 于 2016-4-22 20:30 编辑
回复 1# xyq916
思路演示:- @echo off&setlocal enabledelayedexpansion
- (for /f "delims=" %%a in ('more +13 %0^|find "+"^|find /v "+000"') do (
- set str=%%a&echo !str:~-3!!str!
- ))>$
- (for /f "delims=" %%a in ('sort /r $') do (
- set str=%%a&echo !str:~3!
- ))>new.txt
- (for /f "delims=" %%a in ('more +13 %0^|find "-"') do (
- set str=%%a&set/a z=1999-1!str:~-3!&echo !z!!str!
- ))>$
- (for /f "delims=" %%a in ('sort /r $') do (
- set str=%%a&echo !str:~3!
- ))>>new.txt&more +13 %0|find "+000" >>new.txt&del $&start new.txt&exit
- 0.00000000e+000
- 4.23389673e-002
- 1.69804394e-001
- 2.79017985e-001
- 1.37632385e+001
- 9.83318090e+002
复制代码
实测2万行排序,也不过3秒而已。请自行添加数字到尾部。
作者: xyq916 时间: 2016-4-22 21:05
回复 2# happy886rr
大神您好,本人菜鸟此前一点没接触过这方面知识,我把您发的代码01~13行复制到文本文档里,然后改成bat文件,
然后将bat文件和要处理的“1.txt”文件放到同一个文件夹,双击bat文件,得到了1个空的"new.txt"文件,您后面的提示说:请自行添加数字到尾部
是指把要排序的数字考到bat文件中的最后面吗,我有很多个“1.txt”这的文本要处理,我想要在只有一个“1.txt”和bat文件的文件夹里双击bat文件得到我要的"new.txt",请问如何实现。
作者: CrLf 时间: 2016-4-22 21:33
本帖最后由 CrLf 于 2016-4-22 22:26 编辑
正好适合js- @mshta http://bathome.net/s/hta/?string var arr=type('测试.txt').split('\r\n');head=arr.slice(0,6);body=arr.slice(7).sort(function(a,b){return b*1-a*1});head.concat(body) >输出.txt
复制代码
作者: happy886rr 时间: 2016-4-22 22:03
本帖最后由 happy886rr 于 2016-4-22 22:05 编辑
回复 3# xyq916
把代码里的%0,改成1.txt就是你要的。这个你应该会改(总共有3个%0,仔细找找),我就不重复写了。
作者: CrLf 时间: 2016-4-22 22:04
回复 4# CrLf
哦可以不用 *1,肯定是数字运算
作者: happy886rr 时间: 2016-4-22 22:06
回复 6# CrLf
大师,他是要从大到小排列。+000在最底下
作者: xyq916 时间: 2016-4-22 22:25
回复 7# happy886rr
成功了!各位辛苦啦!感谢各位大神!祝愿 批处理之家 越办越好!
作者: CrLf 时间: 2016-4-22 22:26
回复 7# happy886rr
哦,那把 a b 对调一下就好了
作者: CrLf 时间: 2016-4-22 22:35
顺便说一句,也可以用暴力解:- @echo off
- (
- find "e+" a.txt | findstr "[1-9].*e" | sort /r | sort /+10
- find "e-" a.txt | sort /r | sort /+10
- find "e+" a.txt | findstr /v "[1-9].*e"
- )>new.txt
复制代码
作者: pcl_test 时间: 2016-11-19 16:46
- rem win7及以上系统运行
- powershell -c "$a=gc '文本.txt';$a[0..4];$a[5..($a.count-1)]|sort {1*$_} -desc"
- pause
复制代码
作者: xyq916 时间: 2018-12-13 20:30
回复 11# pcl_test
多谢!
作者: 523066680 时间: 2018-12-13 22:14
长达两年的Response
作者: CrLf 时间: 2018-12-13 23:00
...
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |