[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]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
请会的朋友帮忙 谢谢

  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

  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

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

TOP

本帖最后由 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

返回列表