Board logo

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

作者: gg20100109    时间: 2023-5-9 23:00     标题: 求助批处理,很多纯数字,连续的按起止排列,单独的不变

很多纯数字,排列方式如下
10000001
10000002
10000003
10000004
10000006
11000008
11000009
12000010
13000011
14000013
输出为txt文档,起止样式
10000001-10000006
11000008-11000009
12000010
13000011
14000013
作者: hfxiang    时间: 2023-5-10 12:01

回复 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
作者: buyiyang    时间: 2023-5-10 12:08

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

作者: gg20100109    时间: 2023-5-10 12:20

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



    谢谢。
作者: terse    时间: 2023-5-10 14:10

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





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