Board logo

标题: [文本处理] [已解决]求助批处理把多个ASC文件合并,从每个文件的第3行开始 [打印本页]

作者: xueyufei    时间: 2024-3-11 22:10     标题: [已解决]求助批处理把多个ASC文件合并,从每个文件的第3行开始

本帖最后由 xueyufei 于 2024-3-12 11:54 编辑

求助各位大佬~
我要写一个*.bat的代码,实现以下作用:
1、有个多个asc格式的文件(相当于txt),按文件名排序
2、使用 bat代码对多个asc文件进行合并,要求为:
  2.1 第一个asc文件,从第一行开始复制
  2.2 其余的asc文件,从第三行开始复制
  2.3 如果以上两个条件很难同时实现,那就:所有文件都从第三行开始复制
3、合并后的文件,在根目录下,重命名为“合并.asc”

例如:
第一个文件:20-35.asc
------------------
date Sunday Mar 11 20:35:00 2024
base hex  timestamps absolute
74099.2804 2 0C0000E4x Rx d 8  71 20 1C 00 FF 00 FF FF
74099.2807 1 00000280x Rx d 8  00 00 15 00 7F 00 37 01
74099.2811 2 0CF00300x Rx d 8  FA FE 00 00 FF FF FF FF

------------------


第二个文件:20-36.asc
------------------
date Sunday Mar 11 20:36:00 2024
base hex  timestamps absolute
74159.2757 2 18FED900x Rx d 8  00 00 0C 0F 3F 00 0C 01
74159.2763 1 18F00E00x Rx d 8  00 00 00 00 00 00 00 00
74159.2763 2 18F00A00x Rx d 8  FF FF 00 00 FF FF FF FF
74159.2768 1 00000074x Rx d 8  CE 13 00 00 00 00 00 00
74159.2769 2 18FEDF00x Rx d 8  81 FF FF FF 00 00 00 00

------------------


第三个文件:20-37.asc
------------------
date Sunday Mar 11 20:37:00 2024
base hex  timestamps absolute
74219.2712 1 000001B4x Rx d 8  00 00 00 00 00 00 00 00
74219.2718 1 18EB0000x Rx d 8  00 A0 00 00 00 00 00 A8
74219.2724 1 0C41A800x Rx d 8  00 00 00 00 00 00 00 00
74219.2730 1 0C41A804x Rx d 8  00 00 00 00 00 00 00 00

------------------


合并的结果:合并.asc
------------------
date Sunday Mar 11 20:35:00 2024
base hex  timestamps absolute
74099.2804 2 0C0000E4x Rx d 8  71 20 1C 00 FF 00 FF FF
74099.2807 1 00000280x Rx d 8  00 00 15 00 7F 00 37 01
74099.2811 2 0CF00300x Rx d 8  FA FE 00 00 FF FF FF FF
74159.2757 2 18FED900x Rx d 8  00 00 0C 0F 3F 00 0C 01
74159.2763 1 18F00E00x Rx d 8  00 00 00 00 00 00 00 00
74159.2763 2 18F00A00x Rx d 8  FF FF 00 00 FF FF FF FF
74159.2768 1 00000074x Rx d 8  CE 13 00 00 00 00 00 00
74159.2769 2 18FEDF00x Rx d 8  81 FF FF FF 00 00 00 00
74219.2712 1 000001B4x Rx d 8  00 00 00 00 00 00 00 00
74219.2718 1 18EB0000x Rx d 8  00 A0 00 00 00 00 00 A8
74219.2724 1 0C41A800x Rx d 8  00 00 00 00 00 00 00 00
74219.2730 1 0C41A804x Rx d 8  00 00 00 00 00 00 00 00

------------------

如果很难实现,就都从第三行开始复制,合并结果
合并的结果:合并.asc
------------------
74099.2804 2 0C0000E4x Rx d 8  71 20 1C 00 FF 00 FF FF
74099.2807 1 00000280x Rx d 8  00 00 15 00 7F 00 37 01
74099.2811 2 0CF00300x Rx d 8  FA FE 00 00 FF FF FF FF
74159.2757 2 18FED900x Rx d 8  00 00 0C 0F 3F 00 0C 01
74159.2763 1 18F00E00x Rx d 8  00 00 00 00 00 00 00 00
74159.2763 2 18F00A00x Rx d 8  FF FF 00 00 FF FF FF FF
74159.2768 1 00000074x Rx d 8  CE 13 00 00 00 00 00 00
74159.2769 2 18FEDF00x Rx d 8  81 FF FF FF 00 00 00 00
74219.2712 1 000001B4x Rx d 8  00 00 00 00 00 00 00 00
74219.2718 1 18EB0000x Rx d 8  00 A0 00 00 00 00 00 A8
74219.2724 1 0C41A800x Rx d 8  00 00 00 00 00 00 00 00
74219.2730 1 0C41A804x Rx d 8  00 00 00 00 00 00 00 00

------------------


补充说明:文件数量很多,每个文件里的行数也很多!
#每分钟一个文件,即一天有60*24=1440个文件
#每个文件,有3-5万行
作者: ShowCode    时间: 2024-3-11 22:24

回复 1# xueyufei


都从第三行开始复制.bat
  1. @echo off
  2. set "OutFile=Merge.asc"
  3. cd /d "%~dp0"
  4. type nul > "%temp%\%OutFile%"
  5. for /f "delims=" %%i in ('dir /b /a-d *.asc') do (
  6.     echo %%i
  7.     more +2 "%%i" >> "%temp%\%OutFile%"
  8. )
  9. move "%temp%\%OutFile%" "%~dp0"
复制代码

作者: hfxiang    时间: 2024-3-12 08:44

回复 1# xueyufei

用第3方工具gawk( http://bcn.bathome.net/tool/4.1.0/gawk.exe )的实现方式如下:
  1. gawk "NR==FNR&&FNR<3;FNR>2" 20*.asc>合并.asc
复制代码

作者: xueyufei    时间: 2024-3-12 11:56

回复 2# ShowCode
太感谢了,测试有效
作者: xueyufei    时间: 2024-3-12 12:08

回复 3# hfxiang

确实很强大,比直接使用bat命令更快。
测试中有个小问题:
1、根据文件名的排序,有些asc文件在gawk.exe软件上面,有些在软件的下面
2、似乎只能合并软件上面的那些文件,下面的文件是合并不了的

同时,合并是按文件名 顺序 排序的,即调整文件夹里的排序方式,是没有用的。
应对的方法是,修改gawk.exe软件的名字,让它排在文件的最下面

总之,非常感谢,解决了我遇到的困难




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