返回列表 发帖

[文本处理] [已解决]批处理如何按指定行数进行合并行!

本帖最后由 xudaweb 于 2014-3-7 15:55 编辑

如:一文本里有数据100行,每行只有1个数据
584
H52
G52
482
432
F52
E52
330
280
D52
C52
178
128
B52
A52
26
583
520
H51
G51
431
368
F51
E51
279
216
D51
C51
127
64
B51
A51
582
H50
G50
481
430
F50
E50
329
278
D50
C50
177
126
B50
A50
25
581
519
H49
G49
429
367
F49
E49
277
215
D49
C49
125
63
B49
A49
580
H48
G48
480
428
F48
E48
328
276
D48
C48
176
124
B48
A48
24
579
518
H47
G47
427
366
F47
E47
275
214
D47
C47
123
62
B47
A47
578
H46
G46
479COPY
如何按照每10行合并成一行,每个数据之间用空格隔开,生成10行,每行10个。
或者每5行合并成一行,最后生成20行,顺序不允许改变,请各位指导一下。
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2
学习...

本帖最后由 522235677 于 2014-3-6 13:53 编辑
@echo off & setlocal ENABLEDELAYEDEXPANSION
for /f %%i in (1.txt) do (
        set /a n+=1
        set /a a=!n!%%10
set /p=%%i <nul
        if "!a!"=="0" echo.
)
pauseCOPY
584 H52 G52 482 432 F52 E52 330 280 D52
C52 178 128 B52 A52 26 583 520 H51 G51
431 368 F51 E51 279 216 D51 C51 127 64
B51 A51 582 H50 G50 481 430 F50 E50 329
278 D50 C50 177 126 B50 A50 25 581 519
H49 G49 429 367 F49 E49 277 215 D49 C49
125 63 B49 A49 580 H48 G48 480 428 F48
E48 328 276 D48 C48 176 124 B48 A48 24
579 518 H47 G47 427 366 F47 E47 275 214
D47 C47 123 62 B47 A47 578 H46 G46 479
1

评分人数

TOP

@echo off
for /f "delims=" %%a in (1.txt) do (
    set /p=%%a <nul
    set /a "n+=1, 1/(n%%10)" 2>nul || echo,
)
pauseCOPY
1

评分人数

TOP

回复 2# 522235677


    可以把结果单独导成TXT文本么?
学习...

TOP

回复 3# apang

能把两行set的语法解释一下么?看不懂。。。

还有怎么样把处理的结果导到txt文本里?
学习...

TOP

回复 5# xudaweb


2楼的这样改:
@echo off & setlocal ENABLEDELAYEDEXPANSION
(for /f %%i in (1.txt) do (
        set /a n+=1
        set /a a=!n!%%10
        if "!a!"=="0" (echo.) else (set /p=%%i <nul)
))>2.txt
pauseCOPY
3楼的这样改:
@echo off
(for /f "delims=" %%a in (1.txt) do (
    set /p=%%a <nul
    set /a "n+=1, 1/(n%%10)" 2>nul || echo,
))>2.txt
pauseCOPY
1

评分人数

TOP

@echo off
gawk "{printf (NR%%10)?$0 FS:$0\"\n\"}" a.txt > b.txtCOPY
1

评分人数

TOP

回复 7# DAIC

感谢各位的帮忙。

请问能不能以5,10分别合并呢?第一行5个第二行10个这样交替进行合并?数据的顺序还是保持不变。
学习...

TOP

回复 8# xudaweb
@echo off & setlocal ENABLEDELAYEDEXPANSION
set h=6
(for /f %%i in (java学习笔记.txt) do (
set /a n+=1
set /a a=!n!%%!h!
if "!a!"=="0" (
if "!h!"=="6" (set h=11) else (set h=6)
set "n="
echo.
) else (
set /p=%%i <nul
)
))>nuw.txt
pauseCOPY
584 H52 G52 482 432
E52 330 280 D52 C52 178 128 B52 A52 26
520 H51 G51 431 368
E51 279 216 D51 C51 127 64 B51 A51 582
G50 481 430 F50 E50
278 D50 C50 177 126 B50 A50 25 581 519
G49 429 367 F49 E49
215 D49 C49 125 63 B49 A49 580 H48 G48
428 F48 E48 328 276
C48 176 124 B48 A48 24 579 518 H47 G47
366 F47 E47 275 214
C47 123 62 B47 A47 578 H46 G46 479

TOP

回复 9# 522235677


    丢掉了一些数字,不够100个啦。

TOP

回复 8# xudaweb
@echo off
gawk "{printf (NR%%15)?$0 FS:$0\"\n\"}" a.txt | gawk "{for(i=1;i<5;i++)printf \"%%s \",$i;print $i;for(j=6;j<NF;j++)printf \"%%s \",$j;print $j}" > b.txtCOPY
1

评分人数

    • xudaweb: gawk太深奥了,语法看不懂。。。技术 + 1

TOP

回复 10# DAIC
@echo off & setlocal ENABLEDELAYEDEXPANSION
set h=5
for /f %%i in (java学习笔记.txt) do (
        set /a n+=1
        set /a a=!n!%%!h!
set /p=%%i <nul
        if "!a!"=="0" (
                if "!h!"=="5" (set h=10) else (set h=5)
                set "n="
                echo.
        )
)
pauseCOPY
失误……

TOP

本帖最后由 xudaweb 于 2014-3-6 16:13 编辑

回复 12# 522235677

能稍微解释一下中间判断的红色部分么?看不明白。。。

@echo off & setlocal ENABLEDELAYEDEXPANSION
set h=5
for /f %%i in (java学习笔记.txt) do (
        set /a n+=1
        set /a a=!n!%%!h!
        set /p=%%i <nul
        if "!a!"=="0" (
                if "!h!"=="5" (set h=10) else (set h=5)
                set "n="
                echo.

        )
)
pause
学习...

TOP

set /a a=!n!%%!h!  这个就是算1除以5(10)得出的余数 (以便知道是否处理了十个或者五个数据)
set /p=%%i <nul     这个是将多行显示在一行
if "!a!"=="0" (  这个!a!就是上面那个计算出来的余数,如果余数为0的话,那说明已经处理到第十行或者第五行了
if "!h!"=="5" (set h=10) else (set h=5)     检测当然处理的行是多少个值,是5个的话,就换成10来出来,如果是10的话就换为5,这样就实现了交替输出
set "n="  这个就是重新计算行数
echo.  达到5或10行该换行处理了
2

评分人数

TOP

回复 14# 522235677

太详细了,这下终于明白了!感谢~
学习...

TOP

返回列表