找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 87202|回复: 19

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

[复制链接]
发表于 2014-3-5 19:26:55 | 显示全部楼层 |阅读模式
本帖最后由 xudaweb 于 2014-3-7 15:55 编辑

如:一文本里有数据100行,每行只有1个数据
  1. 584
  2. H52
  3. G52
  4. 482
  5. 432
  6. F52
  7. E52
  8. 330
  9. 280
  10. D52
  11. C52
  12. 178
  13. 128
  14. B52
  15. A52
  16. 26
  17. 583
  18. 520
  19. H51
  20. G51
  21. 431
  22. 368
  23. F51
  24. E51
  25. 279
  26. 216
  27. D51
  28. C51
  29. 127
  30. 64
  31. B51
  32. A51
  33. 582
  34. H50
  35. G50
  36. 481
  37. 430
  38. F50
  39. E50
  40. 329
  41. 278
  42. D50
  43. C50
  44. 177
  45. 126
  46. B50
  47. A50
  48. 25
  49. 581
  50. 519
  51. H49
  52. G49
  53. 429
  54. 367
  55. F49
  56. E49
  57. 277
  58. 215
  59. D49
  60. C49
  61. 125
  62. 63
  63. B49
  64. A49
  65. 580
  66. H48
  67. G48
  68. 480
  69. 428
  70. F48
  71. E48
  72. 328
  73. 276
  74. D48
  75. C48
  76. 176
  77. 124
  78. B48
  79. A48
  80. 24
  81. 579
  82. 518
  83. H47
  84. G47
  85. 427
  86. 366
  87. F47
  88. E47
  89. 275
  90. 214
  91. D47
  92. C47
  93. 123
  94. 62
  95. B47
  96. A47
  97. 578
  98. H46
  99. G46
  100. 479
复制代码
如何按照每10行合并成一行,每个数据之间用空格隔开,生成10行,每行10个。
或者每5行合并成一行,最后生成20行,顺序不允许改变,请各位指导一下。

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2014-3-5 20:16:22 | 显示全部楼层
本帖最后由 522235677 于 2014-3-6 13:53 编辑
  1. @echo off & setlocal ENABLEDELAYEDEXPANSION
  2. for /f %%i in (1.txt) do (
  3.         set /a n+=1
  4.         set /a a=!n!%%10
  5.         set /p=%%i <nul
  6.         if "!a!"=="0" echo.
  7. )
  8. pause
复制代码
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技术 +1 收起 理由
xudaweb + 1 3Q

查看全部评分

发表于 2014-3-6 09:29:47 | 显示全部楼层
  1. @echo off
  2. for /f "delims=" %%a in (1.txt) do (
  3.     set /p=%%a <nul
  4.     set /a "n+=1, 1/(n%%10)" 2>nul || echo,
  5. )
  6. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
xudaweb + 1 3Q

查看全部评分

 楼主| 发表于 2014-3-6 09:44:58 | 显示全部楼层
回复 2# 522235677


    可以把结果单独导成TXT文本么?
 楼主| 发表于 2014-3-6 09:50:57 | 显示全部楼层
回复 3# apang

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

还有怎么样把处理的结果导到txt文本里?
发表于 2014-3-6 11:01:32 | 显示全部楼层
回复 5# xudaweb


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

评分

参与人数 1技术 +1 收起 理由
xudaweb + 1 谢谢

查看全部评分

发表于 2014-3-6 11:04:47 | 显示全部楼层
  1. @echo off
  2. gawk "{printf (NR%%10)?$0 FS:$0"\n"}" a.txt > b.txt
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2014-3-6 11:21:58 | 显示全部楼层
回复 7# DAIC

感谢各位的帮忙。

请问能不能以5,10分别合并呢?第一行5个第二行10个这样交替进行合并?数据的顺序还是保持不变。
发表于 2014-3-6 11:48:45 | 显示全部楼层
回复 8# xudaweb
  1. @echo off & setlocal ENABLEDELAYEDEXPANSION
  2. set h=6
  3. (for /f %%i in (java学习笔记.txt) do (
  4.         set /a n+=1
  5.         set /a a=!n!%%!h!
  6.         if "!a!"=="0" (
  7.                 if "!h!"=="6" (set h=11) else (set h=6)
  8.                 set "n="
  9.                 echo.
  10.         ) else (
  11.                 set /p=%%i <nul
  12.         )
  13. ))>nuw.txt
  14. pause
复制代码
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
发表于 2014-3-6 12:43:02 | 显示全部楼层
回复 9# 522235677


    丢掉了一些数字,不够100个啦。
发表于 2014-3-6 12:43:29 | 显示全部楼层
回复 8# xudaweb
  1. @echo off
  2. 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.txt
复制代码

评分

参与人数 1技术 +1 收起 理由
xudaweb + 1 gawk太深奥了,语法看不懂。。。

查看全部评分

发表于 2014-3-6 13:46:51 | 显示全部楼层
回复 10# DAIC
  1. @echo off & setlocal ENABLEDELAYEDEXPANSION
  2. set h=5
  3. for /f %%i in (java学习笔记.txt) do (
  4.         set /a n+=1
  5.         set /a a=!n!%%!h!
  6.         set /p=%%i <nul
  7.         if "!a!"=="0" (
  8.                 if "!h!"=="5" (set h=10) else (set h=5)
  9.                 set "n="
  10.                 echo.
  11.         )
  12. )
  13. pause
复制代码
失误……
 楼主| 发表于 2014-3-6 16:11:19 | 显示全部楼层
本帖最后由 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
发表于 2014-3-6 19:52:03 | 显示全部楼层
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技术 +2 收起 理由
zll855 + 1 乐于助人
xudaweb + 1 感谢!

查看全部评分

 楼主| 发表于 2014-3-6 20:49:10 | 显示全部楼层
回复 14# 522235677

太详细了,这下终于明白了!感谢~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-21 02:07 , Processed in 0.018140 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表