标题: [文本处理] 【已解决】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
- @echo off
- cd /d "%~dp0"
- for /l %%l in (1,1,10000) do (
- cut -f %%l "a.txt" > "%%l.txt"
- findstr . "%%l.txt" 1>nul || (del "%%l.txt" & goto :next)
- )
- :next
- pause
复制代码
假设不超过10000列
作者: aloha20200628 时间: 2024-11-9 22:37
本帖最后由 aloha20200628 于 2024-11-9 22:40 编辑
回复 1# 思想之翼
追加一个 gawk 一行流版本...
源文件为 a.txt,结果生成一系列 1.txt, 2.txt, ..., n.txt- gawk -F "\t+" "{for(i=1;i<=NF;++i)print $i>>i\".txt\"}" a.txt
复制代码
作者: qixiaobin0715 时间: 2024-11-11 09:57
不用第三方应当也可以:- @echo off
- for /f "delims=" %%i in (a.txt) do (
- setlocal enabledelayedexpansion
- set str="%%i"
- set str=!str: =" "!
- for %%j in (!str!) do (
- set /a n+=1
- echo,%%~j>>!n!.txt
- )
- endlocal
- )
- 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 逐行处理大数据的方法,再试试吧...
- <# ::
- @echo off & powershell "iex(${%~f0}|out-string)" &pause&exit/b
- #>
- foreach($l in [io.file]::readlines('a.txt')) {
- $n=1; foreach($v in $l.split("`t")) { $f=''+($n++)+'.txt'; $v|ac $f }
- }
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |