标题: [文本处理] 如何将文本里每行前5位字符相同的行进行分组并找出每组中后5位数字的值最大的一个 [打印本页]
作者: necnec1 时间: 2012-12-24 18:42 标题: 如何将文本里每行前5位字符相同的行进行分组并找出每组中后5位数字的值最大的一个
本帖最后由 pcl_test 于 2016-11-13 22:59 编辑
I1E0000001
I1E0004997
I1E0004998
I1E0004999
I1E0005000
I1ET000001
I1ET000002
I1ET000003
I1GTC00001
I1GTC00002
I1GTC15000
左边是样本文本A.TXT 前五位固定 后五位是编号 编号最大能到99999
我想提取出后五位编号最大的一组
例如 前五位 I1E00 他的编号最大的一组是05000 就把这一组提取出来
最后得到的结果是
I1E0005000
I1ET000003
I1GTC15000
请会的朋友帮忙 谢谢
作者: tmplinshi 时间: 2012-12-24 19:39
本帖最后由 tmplinshi 于 2012-12-24 19:41 编辑
- @echo off
- setlocal enabledelayedexpansion
-
- (
- for /f %%i in (' sort /r "a.txt" ') do (
- set str=%%i
- if "!_last:~0,5!" neq "!str:~0,5!" (echo %%i)
- set _last=!str!
- )
- ) >"%~f0.tmp"
-
- sort "%~f0.tmp" >result.txt
- del "%~f0.tmp"
复制代码
作者: xxxx20 时间: 2012-12-24 22:33
似乎没达到要求,但是总体思路是不错了。
作者: pcl_test 时间: 2016-11-13 23:20
- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('type "文本.txt"') do (
- set "str=%%a"
- for /f "delims=" %%b in ("!str:~,5!") do (
- if not defined #%%b (
- set #%%b=!str:~5,5!
- ) else (
- if !str:~5^,5! geq !#%%b! set #%%b=!str:~5,5!
- )
- )
- )
- for /f "tokens=1,2 delims=#=" %%a in ('set #') do echo;%%a%%b
- pause
复制代码
作者: pcl_test 时间: 2016-11-13 23:29
- rem win7及以上系统运行
- more +3 "%~f0"|powershell -c "$input|group {$_.Substring(0,5)}|%%{$_.group|sort -descending|select -first 1}"
- pause&exit
- I1E0000001
- I1E0004997
- I1E0004998
- I1E0004999
- I1E0005000
- I1ET000001
- I1ET000002
- I1ET000003
- I1GTC00001
- I1GTC00002
- I1GTC15000
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |