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

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

本帖最后由 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行,顺序不允许改变,请各位指导一下。
1

评分人数

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

回复 19# sbjugt


    批处理重定向

TOP

回复 2# 522235677


    能不能解释下 set /p=%%i <nul

TOP

@echo off
for /f %%i in (a.txt) do (set a=%%i&&goto:a)
:a
echo %a%
set /a c=1
set /a d=10
:c
for /f "skip=%c% tokens=* delims=" %%i in (a.txt) do (set b=%%i&&goto :b)
:b
set /a e=%c%%%10
if %e%==0 (set a=%b%) else (set a=%a% %b%)
set /a c=c+1
if %c% lss %d% goto :c
echo %a%>>c.txt
set /a d=%d%+10
if %d% lss 110 goto :c
exit

TOP

回复 16# zhanglei1371


? : 是三元描述符
类似于 if () ... else ...
FS 是列分隔符
1

评分人数

    • zhanglei1371: 多谢指点,原来FS相当于默认的空格技术 + 1

TOP

回复 7# DAIC


    这段代码可否解释下,尤其中间FS:处,不太理解,学习下……

TOP

回复 14# 522235677

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

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

本帖最后由 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

回复 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
复制代码
失误……

TOP

回复 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

评分人数

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

TOP

回复 9# 522235677


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

TOP

回复 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

TOP

回复 7# DAIC

感谢各位的帮忙。

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

TOP

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

评分人数

TOP

返回列表