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

[文本处理] 求助批处理,很多纯数字,连续的按起止排列,单独的不变

很多纯数字,排列方式如下
10000001
10000002
10000003
10000004
10000006
11000008
11000009
12000010
13000011
14000013
输出为txt文档,起止样式
10000001-10000006
11000008-11000009
12000010
13000011
14000013

回复 1# gg20100109

如不介意第3方工具gawk( http://bcn.bathome.net/tool/4.1.0/gawk.exe
命令行窗口方式执行:
  1. gawk "NR==1{printf(\"%s\",$0);a=0;b=$0;next}++b==$0{a=1;next}a{printf(\"-%s\",b-1)}{printf(\"\n%s\",$0);a=0;b=$0}END{if(a){printf(\"-%s\",b)}}" input.txt>output.txt
复制代码
写进脚本方式执行
  1. gawk "NR==1{printf(\"%%s\",$0);a=0;b=$0;next}++b==$0{a=1;next}a{printf(\"-%%s\",b-1)}{printf(\"\n%%s\",$0);a=0;b=$0}END{if(a){printf(\"-%%s\",b)}}" input.txt>output.txt
复制代码
注意,楼主的数据样本中缺少了10000005项,故上述脚本的实际结果为:
10000001-10000004
10000006
11000008-11000009
12000010
13000011
14000013

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. cd "%~dp0"
  3. set "input=1.txt"
  4. (for /f "delims=" %%i in (%input%) do (
  5.     set /a n=%%i-!L!
  6.     if not defined f (
  7.             set /a f=%%i
  8.         ) else if !n! equ 1 (
  9.             set /a e=%%i,m+=1
  10.         ) else if !m! lss 1 (
  11.             echo,!f!
  12.             set /a f=%%i,m=0
  13.         ) else (
  14.             echo,!f!-!e!
  15.             set /a f=%%i,m=0
  16.         )
  17.     set /a L=%%i
  18.     )
  19. if !m! lss 1 (echo,!f!) else (echo,!f!-!e!)
  20. )>out_%input%
复制代码

TOP

buyiyang 发表于 2023-5-10 12:08



    谢谢。

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (a.txt) do (
  3.      if defined n (
  4.          if !m! neq %%i (
  5.             set /a m-=1
  6.             if !n! equ !m! (echo !n!) else echo !n! -!m!
  7.             set /a n=%%i,m=n+1
  8.          ) else set /a m+=1
  9.      ) else set /a n=%%i,m=n+1
  10. )
  11. set /a m-=1
  12. if !n! equ !m! (echo !n!) else echo !n! - !m!
  13. pause
复制代码

TOP

返回列表