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

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

  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,如何实现?

回复 1# Rasm


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

评分人数

    • Rasm: 乐于助人技术 + 1

TOP

回复 2# yakeyun


    10MB的文件,用时11分钟

TOP

  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

评分人数

    • Rasm: 乐于助人技术 + 1

TOP

本帖最后由 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的任务,然后用总的显示输出到文本,时间可以再节省一半左右。

TOP

@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

评分人数

    • Rasm: 乐于助人技术 + 1

TOP

回复 5# yakeyun


    总计用时30秒,比之前快了很多。6楼和你一样的方式,但是他的速度慢很多

TOP

本帖最后由 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

评分人数

    • Rasm: 完成速度:27秒技术 + 1

TOP

回复 6# yd_wangqing


把重定向放在for循环外部可以提升执行速度,参考:
https://mp.weixin.qq.com/s/VZk0TmYUpFdCoWK9ZpgL0Q
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 8# newswan


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

评分人数

    • Rasm: GWAK天下无敌,5秒处理完成技术 + 1
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

谢谢指导,确实速度提高了很多。

TOP

回复 9# Batcher


   
谢谢指导,确实速度提高了很多。

TOP

unix 老工具 真厉害,ms 真是业余的。
1

评分人数

    • Rasm: 确实很给力技术 + 1

TOP

本帖最后由 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

评分人数

    • Rasm: 乐于助人技术 + 1

TOP

本帖最后由 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
复制代码
比较一下,看差距有多大

TOP

返回列表