找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 71181|回复: 16

[文本处理] 批处理如何将一个文本内的内容分割成两个文本

[复制链接]
发表于 2021-7-13 09:08:14 | 显示全部楼层 |阅读模式
  1. zz1558684222----123456789a
  2. zzc96263----123654
  3. zzc96263----987654321
  4. zzj001----7758258
  5. zzj520138----123654
  6. zzp2001----12345
  7. zzp2001----7758258
  8. zzwp----123456789a
  9. zzwp----12345
  10. zzy369554039----987654321
  11. zzy369554039----123456789a
  12. zzzaaaa----123654
  13. zzzaaaa----987654321
复制代码




想通过分隔符   ---- 将左边的保存为1.txt,右边的保存为2.txt,如何实现?
发表于 2021-7-13 10:03:16 | 显示全部楼层
回复 1# Rasm


@echo off
for /f "delims=---- tokens=1,*" %%i in (data.txt) do echo %%i>>1.TXT&echo %%j>>2.TXT
exit

评分

参与人数 1技术 +1 收起 理由
Rasm + 1 乐于助人

查看全部评分

 楼主| 发表于 2021-7-13 11:58:49 | 显示全部楼层
回复 2# yakeyun


    10MB的文件,用时11分钟
发表于 2021-7-13 13:14:52 | 显示全部楼层
  1. @echo off
  2. (for /f "tokens=1 delims=-" %%i in ('type test.txt') do echo,%%i)>1.txt
  3. (for /f "tokens=2 delims=-" %%a in ('type test.txt') do echo,%%a)>2.txt
  4. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
Rasm + 1 乐于助人

查看全部评分

发表于 2021-7-13 15:25:07 | 显示全部楼层
本帖最后由 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的任务,然后用总的显示输出到文本,时间可以再节省一半左右。
发表于 2021-7-13 20:41:15 | 显示全部楼层
@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

评分

参与人数 1技术 +1 收起 理由
Rasm + 1 乐于助人

查看全部评分

 楼主| 发表于 2021-7-13 23:46:43 | 显示全部楼层
回复 5# yakeyun


    总计用时30秒,比之前快了很多。6楼和你一样的方式,但是他的速度慢很多
发表于 2021-7-14 01:05:58 | 显示全部楼层
本帖最后由 newswan 于 2021-7-14 02:22 编辑

sed

  1. sed -r -e "s/(.*)----(.*)/\1/" data.txt > d1.txt
  2. sed -r -e "s/(.*)----(.*)/\2/" data.txt > d2.txt
复制代码

评分

参与人数 1技术 +1 收起 理由
Rasm + 1 完成速度:27秒

查看全部评分

发表于 2021-7-14 14:28:44 | 显示全部楼层
回复 6# yd_wangqing


把重定向放在for循环外部可以提升执行速度,参考:
https://mp.weixin.qq.com/s/VZk0TmYUpFdCoWK9ZpgL0Q
发表于 2021-7-14 14:36:15 | 显示全部楼层
回复 8# newswan


我来个 gawk
  1. gawk -F "----" "{print $1 > "1.txt"; print $2 > "2.txt"}" data.txt
复制代码

评分

参与人数 1技术 +1 收起 理由
Rasm + 1 GWAK天下无敌,5秒处理完成

查看全部评分

发表于 2021-7-14 16:12:58 | 显示全部楼层
谢谢指导,确实速度提高了很多。
发表于 2021-7-14 16:13:29 | 显示全部楼层
回复 9# Batcher


   
谢谢指导,确实速度提高了很多。
发表于 2021-7-14 19:07:56 | 显示全部楼层
unix 老工具 真厉害,ms 真是业余的。

评分

参与人数 1技术 +1 收起 理由
Rasm + 1 确实很给力

查看全部评分

发表于 2021-7-15 01:52:32 | 显示全部楼层
本帖最后由 newswan 于 2021-7-15 02:50 编辑

回复 13# newswan


    grep sed

  1. grep -P -o ".*(?=----)" data.txt > dg1.txt
  2. grep -P -o "(?<=----).*" data.txt > dg2.txt

  3. sed -r -e "s/----.*//" data.txt > ds1.txt
  4. sed -r -e "s/.*----//" data.txt > ds2.txt
复制代码
葫芦娃都出来玩玩

评分

参与人数 1技术 +1 收起 理由
Rasm + 1 乐于助人

查看全部评分

发表于 2021-7-15 01:57:12 | 显示全部楼层
本帖最后由 newswan 于 2021-7-15 02:52 编辑

回复 1# Rasm


    powershell
  1.     $fc = (Get-Content data.txt)
  2.     $fc -replace "----.+","" | out-file -Encoding UTF8 data1.txt
  3.     $fc -replace ".+----","" | out-file -Encoding UTF8 data2.txt
复制代码
比较一下,看差距有多大
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 18:29 , Processed in 0.017997 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表