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

[文本处理] 【已解决】BAT:如何依据特定空格,按列分割文本

本帖最后由 思想之翼 于 2024-11-9 19:51 编辑

文本A.txt数值格式如下
A B C        D E        F G H
I        J        K L

问题:如何用gawk 、cut 等第三方工具,依据Tab空格,按列分割A.txt文本?

结果:
1.txt内的数值为文本A.txt的第一列
A B C
I

2.txt内的数值为文本A.txt的第二列
D E
J

3.txt内的数值为文本A.txt的第三列
F G H
K L
1

评分人数

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

本帖最后由 aloha20200628 于 2024-11-13 19:24 编辑

回复 5# 思想之翼

以下代码存为 test.bat 运行,与源文件 a.txt 同目录
代码调用了 powershell 逐行处理大数据的方法,再试试吧...
  1. <# ::
  2. @echo off & powershell "iex(${%~f0}|out-string)" &pause&exit/b
  3. #>
  4. foreach($l in [io.file]::readlines('a.txt')) {
  5.   $n=1; foreach($v in $l.split("`t")) { $f=''+($n++)+'.txt'; $v|ac $f }
  6. }
复制代码

TOP

回复 3# aloha20200628
感谢帮助!代码运行正确。只是有个问题:待分割文本超大(测试文本为10G),会出现错误:gawk:fatal error;internal error

TOP

不用第三方应当也可以:
  1. @echo off
  2. for /f "delims=" %%i in (a.txt) do (
  3.     setlocal enabledelayedexpansion
  4.     set str="%%i"
  5.     set str=!str: =" "!
  6.     for %%j in (!str!) do (
  7.         set /a n+=1
  8.         echo,%%~j>>!n!.txt
  9.     )
  10.     endlocal
  11. )
  12. pause
复制代码
1

评分人数

TOP

本帖最后由 aloha20200628 于 2024-11-9 22:40 编辑

回复 1# 思想之翼
追加一个 gawk 一行流版本...
源文件为 a.txt,结果生成一系列  1.txt, 2.txt, ..., n.txt
  1. gawk -F "\t+" "{for(i=1;i<=NF;++i)print $i>>i\".txt\"}" a.txt
复制代码
1

评分人数

TOP

  1. @echo off
  2. cd /d "%~dp0"
  3. for /l %%l in (1,1,10000) do (
  4. cut -f %%l "a.txt" > "%%l.txt"
  5. findstr . "%%l.txt" 1>nul || (del "%%l.txt" & goto :next)
  6. )
  7. :next
  8. pause
复制代码

假设不超过10000列
1

评分人数

bat小白,请多指教!谢谢!

TOP

返回列表