Board logo

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

作者: 星空    时间: 2012-6-10 16:02     标题: 如何将当前目录下所有文本文件合并为一个然后按指定行数分割成一若干文本文件

本帖最后由 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
作者: apang    时间: 2012-6-10 17:21

  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. )
复制代码
试试
作者: weichenxiehou    时间: 2012-6-10 18:33

  1. copy *.txt temp.txt
  2. gawk "{print >\"result\" int((NR-1)/100)+1 \".txt\"}" temp.txt
  3. del temp.txt
复制代码

作者: broly    时间: 2012-6-10 19:19

本帖最后由 broly 于 2012-6-10 19:25 编辑

回复 3# weichenxiehou
    copy有个地方不是很好,如果一个文本结尾没有换行,去合并另一个文本,那么第二个文本会接着第一个文本末尾开始,而不会另起一行。用more或者type好点
作者: weichenxiehou    时间: 2012-6-10 20:06

本帖最后由 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的话,会卷入一些文件名和空行,又增加问题额复杂性。
作者: poter    时间: 2012-6-10 20:12

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

作者: broly    时间: 2012-6-10 22:14

回复 5# weichenxiehou


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

如果用type,后面加&echo.   ,输出的时候再用 gawk过滤了空行就行。
只用gawk的那个代码也行啊。




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2