标题: [文本处理] 批处理如何将一个文本内的内容分割成两个文本 [打印本页]
作者: Rasm 时间: 2021-7-13 09:08 标题: 批处理如何将一个文本内的内容分割成两个文本
- zz1558684222----123456789a
- zzc96263----123654
- zzc96263----987654321
- zzj001----7758258
- zzj520138----123654
- zzp2001----12345
- zzp2001----7758258
- zzwp----123456789a
- zzwp----12345
- zzy369554039----987654321
- zzy369554039----123456789a
- zzzaaaa----123654
- zzzaaaa----987654321
复制代码
想通过分隔符 ---- 将左边的保存为1.txt,右边的保存为2.txt,如何实现?
作者: yakeyun 时间: 2021-7-13 10:03
回复 1# Rasm
@echo off
for /f "delims=---- tokens=1,*" %%i in (data.txt) do echo %%i>>1.TXT&echo %%j>>2.TXT
exit
作者: Rasm 时间: 2021-7-13 11:58
回复 2# yakeyun
10MB的文件,用时11分钟
作者: qixiaobin0715 时间: 2021-7-13 13:14
- @echo off
- (for /f "tokens=1 delims=-" %%i in ('type test.txt') do echo,%%i)>1.txt
- (for /f "tokens=2 delims=-" %%a in ('type test.txt') do echo,%%a)>2.txt
- pause
复制代码
作者: yakeyun 时间: 2021-7-13 15:25
本帖最后由 yakeyun 于 2021-7-13 16:22 编辑
回复 3# Rasm
感谢4楼大佬的思路,在大佬的思路基础上优化了一下,可以再快一半效率:
@echo off
@echo,@echo off >1.bat
echo,^(for /f "delims=---- tokens=1,*" %%%%i in (data.txt) do echo %%%%i^) ^>1.TXT >>1.bat
echo,exit >>1.bat
start 1.bat
(for /f "delims=---- tokens=2" %%i in (data.txt) do echo %%i)>2.TXT
@del 1.bat
exit
可以试下看看这边测试基本10秒以内可以处理完,这次代码分别处理1和2的任务,然后用总的显示输出到文本,时间可以再节省一半左右。
作者: yd_wangqing 时间: 2021-7-13 20:41
@echo off
setlocal enabledelayedexpansion &chcp 65001
pushd %~dp0
if exist 1.txt del 1.txt
if exist 2.txt del 2.txt
if not exist 1.txt nul>1.txt
if not exist 2.txt nul>2.txt
for /f "tokens=1,2 delims=----" %%i in (dt.txt) do (
echo %%i>>1.txt
echo %%j>>2.txt
)
popd
echo 执行完成,按任意键退出。。。
pause
作者: Rasm 时间: 2021-7-13 23:46
回复 5# yakeyun
总计用时30秒,比之前快了很多。6楼和你一样的方式,但是他的速度慢很多
作者: newswan 时间: 2021-7-14 01:05
本帖最后由 newswan 于 2021-7-14 02:22 编辑
sed- sed -r -e "s/(.*)----(.*)/\1/" data.txt > d1.txt
- sed -r -e "s/(.*)----(.*)/\2/" data.txt > d2.txt
复制代码
作者: Batcher 时间: 2021-7-14 14:28
回复 6# yd_wangqing
把重定向放在for循环外部可以提升执行速度,参考:
https://mp.weixin.qq.com/s/VZk0TmYUpFdCoWK9ZpgL0Q
作者: Batcher 时间: 2021-7-14 14:36
回复 8# newswan
我来个 gawk- gawk -F "----" "{print $1 > \"1.txt\"; print $2 > \"2.txt\"}" data.txt
复制代码
作者: yd_wangqing 时间: 2021-7-14 16:12
谢谢指导,确实速度提高了很多。
作者: yd_wangqing 时间: 2021-7-14 16:13
回复 9# Batcher
谢谢指导,确实速度提高了很多。
作者: newswan 时间: 2021-7-14 19:07
unix 老工具 真厉害,ms 真是业余的。
作者: newswan 时间: 2021-7-15 01:52
本帖最后由 newswan 于 2021-7-15 02:50 编辑
回复 13# newswan
grep sed- grep -P -o ".*(?=----)" data.txt > dg1.txt
- grep -P -o "(?<=----).*" data.txt > dg2.txt
-
- sed -r -e "s/----.*//" data.txt > ds1.txt
- sed -r -e "s/.*----//" data.txt > ds2.txt
复制代码
葫芦娃都出来玩玩
作者: newswan 时间: 2021-7-15 01:57
本帖最后由 newswan 于 2021-7-15 02:52 编辑
回复 1# Rasm
powershell- $fc = (Get-Content data.txt)
- $fc -replace "----.+","" | out-file -Encoding UTF8 data1.txt
- $fc -replace ".+----","" | out-file -Encoding UTF8 data2.txt
复制代码
比较一下,看差距有多大
作者: 路过 时间: 2021-7-16 12:02
以前bat处理个10mb的文本文档,要30多分钟,有时候程序会崩溃,然后整个人也崩溃了。
作者: cmd1152 时间: 2021-7-18 12:32
回复 3# Rasm
加括号会快很多
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |