Board logo

标题: [文本处理] 如何将文本里每行前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 编辑
  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"
复制代码

作者: xxxx20    时间: 2012-12-24 22:33

似乎没达到要求,但是总体思路是不错了。
作者: pcl_test    时间: 2016-11-13 23:20

  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
复制代码

作者: pcl_test    时间: 2016-11-13 23:29

  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
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2