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

[文本处理] 如何将文本里每行前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:41 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (
  4.     for /f %%i in (' sort /r "a.txt" ') do (
  5.         set str=%%i
  6.         if "!_last:~0,5!" neq "!str:~0,5!" (echo %%i)
  7.         set _last=!str!
  8.     )
  9. ) >"%~f0.tmp"
  10. sort "%~f0.tmp" >result.txt
  11. del "%~f0.tmp"
复制代码

TOP

似乎没达到要求,但是总体思路是不错了。

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('type "文本.txt"') do (
  3.     set "str=%%a"
  4.     for /f "delims=" %%b in ("!str:~,5!") do (
  5.         if not defined #%%b (
  6.             set #%%b=!str:~5,5!
  7.         ) else (
  8.             if !str:~5^,5! geq !#%%b! set #%%b=!str:~5,5!
  9.         )
  10.     )
  11. )
  12. for /f "tokens=1,2 delims=#=" %%a in ('set #') do echo;%%a%%b
  13. pause
复制代码

TOP

  1. rem win7及以上系统运行
  2. more +3 "%~f0"|powershell -c "$input|group {$_.Substring(0,5)}|%%{$_.group|sort -descending|select -first 1}"
  3. pause&exit
  4. I1E0000001
  5. I1E0004997
  6. I1E0004998
  7. I1E0004999
  8. I1E0005000
  9. I1ET000001
  10. I1ET000002
  11. I1ET000003
  12. I1GTC00001
  13. I1GTC00002
  14. I1GTC15000
复制代码

TOP

返回列表