Board logo

标题: [文本处理] 【已解决】BAT脚本如何按特定行列分割文件 [打印本页]

作者: 思想之翼    时间: 2023-8-29 13:19     标题: 【已解决】BAT脚本如何按特定行列分割文件

D:\DATA1\A.txt记录数据如下
白产车才
白产车才
手及口立
手及口立
乃力个又
乃力个又

欲将A.txt 按字符分割成4列,且各列的每2行,再分割成3个文件。

输出结果为:
D:\DATA2\01\A_0001.txt记录数据为:


D:\DATA2\01\A_0002.txt记录数据为:


D:\DATA2\01\A_0003.txt记录数据为:


D:\DATA2\01\A_0004.txt记录数据为:


---------------------------------------
D:\DATA2\02\A_0001.txt记录数据为:


D:\DATA2\02\A_0002.txt记录数据为:


D:\DATA2\02\A_0003.txt记录数据为:


D:\DATA2\02\A_0004.txt记录数据为:


---------------------------------------
D:\DATA2\03\A_0001.txt记录数据为:


D:\DATA2\03\A_0002.txt记录数据为:


D:\DATA2\03\A_0003.txt记录数据为:


D:\DATA2\03\A_0004.txt记录数据为:


---------------------------------------
注:cut gawk 可以分步实现
  1. cut -c 1-2 A.txt>B.txt
  2. gawk "NR%%2==1{close(n\".txt\");++n}{print>n\".txt\"}" "A.txt"
复制代码

作者: buyiyang    时间: 2023-8-29 14:21

  1. setlocal enabledelayedexpansion
  2. set /a h=2
  3. set /a c=4-1
  4. set /a line=0
  5. for /f "delims=" %%i in (A.txt) do (
  6.     set /a n=line/%h%+1
  7.     set "d=00!n!"
  8.     md !d:~-2!
  9.     set "p=%%i"
  10.     for /l %%a in (0,1,%c%) do if not "!p:~%%a,1!"=="" (
  11.         set /a t=%%a+1
  12.         set "t=0000!t!"
  13.         >>!d:~-2!\A_!t:~-4!.txt echo,!!p:~%%a,1!
  14.         )
  15.     set /a line+=1
  16.     )
  17. pause
复制代码

作者: hfxiang    时间: 2023-8-29 19:06

回复 1# 思想之翼

以下是gawk方案
注意:"D:\DATA2\A.txt"需保存为ANSI编码格式,对应的文件夹(如“D:\DATA2\01\”等)需提前建立
1.命令行方式(单百分号%)
  1. gawk -v"FS=" -v"pt=D:/DATA2/" "NR%2==1{++n;for(i=1;i<=NF;i++){close(Fn[i]);Fn[i]=sprintf(\"%s%02d/A_%04d.txt\",pt,n,i)}}{for(i=1;i<=NF;i++){print $i>Fn[i]}}" "D:\DATA2\A.txt"
复制代码
2.脚本方式(双百分号%)
  1. gawk -v"FS=" -v"pt=D:/DATA2/" "NR%%2==1{++n;for(i=1;i<=NF;i++){close(Fn[i]);Fn[i]=sprintf(\"%%s%%02d/A_%%04d.txt\",pt,n,i)}}{for(i=1;i<=NF;i++){print $i>Fn[i]}}" "D:\DATA2\A.txt"
复制代码





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