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

[文本处理] 如何将当前目录下所有文本文件合并为一个然后按指定行数分割成一若干文本文件

[复制链接]
发表于 2012-6-10 16:02:57 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-9-21 13:06 编辑

比如像这样。。
1.txt的内容:
1
2
3
……………………
102

2.txt:

1
2
3
4
……………………
201

输出是这样..
out1.txt:
1
2
3
…………
100

out2.txt:
101
102
1
2
3
4
………………
98

out3.txt:
99
100
101
………………
198

out4.txt

199
200
201
发表于 2012-6-10 17:21:56 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. set m=1
  3. for /f "delims=" %%a in ('dir /a-d /b *.txt') do (
  4.   for /f "usebackq delims=" %%b in ("%%a") do (
  5.     set/a n+=1
  6.     echo,%%b>>out!m!.txt
  7.     if "!n!"=="100" set/a m+=1&set n=
  8.   )
  9. )
复制代码
试试
发表于 2012-6-10 18:33:00 | 显示全部楼层

  1. copy *.txt temp.txt
  2. gawk "{print >"result" int((NR-1)/100)+1 ".txt"}" temp.txt
  3. del temp.txt
复制代码
发表于 2012-6-10 19:19:55 | 显示全部楼层
本帖最后由 broly 于 2012-6-10 19:25 编辑

回复 3# weichenxiehou
    copy有个地方不是很好,如果一个文本结尾没有换行,去合并另一个文本,那么第二个文本会接着第一个文本末尾开始,而不会另起一行。用more或者type好点
发表于 2012-6-10 20:06:48 | 显示全部楼层
本帖最后由 weichenxiehou 于 2012-6-10 20:09 编辑

回复 4# broly
这个问题确实需要考量,谢谢提醒。
我的解决办法为:

  1. gawk "{print}" *.txt >temp.txt
  2. gawk "{print >"result" int((NR-1)/100)+1 ".txt"}" temp.txt
  3. del temp.txt
复制代码
当然也可以用sed:
  1. sed "" *.txt>temp.txt
复制代码
版主说可以考虑用type或more,关于more我不知道如何用,请指教。猜测type这样用?

  1. ::为了避免可能将结果文件卷入,没有取.txt的扩展名
  2. (for /f "delims=" %%i in ('dir/b *.txt') do type %%i)>temp
复制代码
不过这样依然会出现文件末无法换行的情况,请测试。
如果是直接type *.txt>temp.txt的话,会卷入一些文件名和空行,又增加问题额复杂性。
发表于 2012-6-10 20:12:49 | 显示全部楼层
本帖最后由 poter 于 2012-6-10 20:15 编辑

我没测试过,不知道对不对~~

@echo off
setlocal enableDelayedExpansion
(for /f %%i in ('dir /b *.txt') do (
        type %%i
))>>new.txt
for /f %%i in (new.txt) do (
        set /a a+=1&set c=1
        set /a b=!a!%%100
        if "!b!"=="0" set /a c+=1
        echo %%i>>out!c!.txt
)
发表于 2012-6-10 22:14:55 | 显示全部楼层
回复 5# weichenxiehou


    more的用法跟type差不多。你把代码里面的 type改为more即可。

如果用type,后面加&echo.   ,输出的时候再用 gawk过滤了空行就行。
只用gawk的那个代码也行啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 02:46 , Processed in 0.010235 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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