Board logo

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

作者: 思想之翼    时间: 2024-11-9 12:16     标题: 【已解决】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
作者: 77七    时间: 2024-11-9 17:10

  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列
作者: aloha20200628    时间: 2024-11-9 22:37

本帖最后由 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
复制代码

作者: qixiaobin0715    时间: 2024-11-11 09:57

不用第三方应当也可以:
  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
复制代码

作者: 思想之翼    时间: 2024-11-13 17:31

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

本帖最后由 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. }
复制代码





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