标题: [文本处理] 求助批处理,很多纯数字,连续的按起止排列,单独的不变 [打印本页]
作者: 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 )
命令行窗口方式执行:- 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
复制代码
写进脚本方式执行- 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
- @echo off&setlocal enabledelayedexpansion
- cd "%~dp0"
- set "input=1.txt"
- (for /f "delims=" %%i in (%input%) do (
- set /a n=%%i-!L!
- if not defined f (
- set /a f=%%i
- ) else if !n! equ 1 (
- set /a e=%%i,m+=1
- ) else if !m! lss 1 (
- echo,!f!
- set /a f=%%i,m=0
- ) else (
- echo,!f!-!e!
- set /a f=%%i,m=0
- )
- set /a L=%%i
- )
- if !m! lss 1 (echo,!f!) else (echo,!f!-!e!)
- )>out_%input%
复制代码
作者: gg20100109 时间: 2023-5-10 12:20
buyiyang 发表于 2023-5-10 12:08
谢谢。
作者: terse 时间: 2023-5-10 14:10
- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%i in (a.txt) do (
- if defined n (
- if !m! neq %%i (
- set /a m-=1
- if !n! equ !m! (echo !n!) else echo !n! -!m!
- set /a n=%%i,m=n+1
- ) else set /a m+=1
- ) else set /a n=%%i,m=n+1
- )
- set /a m-=1
- if !n! equ !m! (echo !n!) else echo !n! - !m!
- pause
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |