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

[文本处理] [已解决]批处理如何将一个文本的每一行分别与另一个文本每行内容合并成一行

本帖最后由 hepeisheng 于 2016-8-24 08:54 编辑

求批处理把a.txt里的每一行插入到b.txt里的所有行求2个bat。在1文件夹内有1个名为a.txt与1个b.七txt和1个bat。双击bat把a.txt文本里的每1行插入到b.xtx文本里的所有行的前面。新产生另1个的文本名字叫把a中每1行插入到b中的所有行的前面。另1个bat则插入到b后面。新产生另1个的文本名字叫把a中每1行插入到b中的所有行后面。请使用高效率的方式要快。谢谢!另问下所产生的文本文件最大有多大限制?

例:
a.txt
ABC
DEF
GHI

b.txt
123
456
789
222

产生的新txt
ABC123
ABC456
ABC789
ABC222
DEF123
DEF456
DEF789
DEF222
GHI123
GHI456
GHI789
GHI222
2

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2
    • pcl_test: 发帖前先使用论坛搜索PB -4

本帖最后由 hepeisheng 于 2016-8-23 00:20 编辑

单bat时

a.txt为1行3字母,b.txt为360k用时8秒,生产速度约0.1m每秒

a.txt为360k,b.txt为1行3字母用时220秒,生产速度约0.0036m每秒

txt为4m时遥遥无期,似是不干活




有gawk.exe时

a.txt为1行3字母,b.txt为45m用时5秒,生产速度约12m每秒

a.txt为45m,b.txt为1行3字母用时5秒,生产速约度12m每秒


a.txt16G大都没问题,b.txt不能于200m,试过160m能工作,产生60G大文件没问题


有gawk.exe时比单bat快120-3333倍



a.txt为45m,b.txt为3行3字母用时10秒,生产速度约18m每秒,生产大文件速度约20m每秒
2

评分人数

TOP

  1. @echo off
  2. (for /f "delims=" %%i in ('type "a.txt"') do (
  3.     for /f "delims=" %%j in ('type "b.txt"') do (
  4.         echo,%%i%%j
  5.     )
  6. ))>"c.txt"
复制代码
请帮忙测试一下几种不同的情况下,BAT和gawk的执行时间分别是多少。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 hepeisheng 于 2016-8-23 09:31 编辑

10楼这个bat,b的体积无限制了,如果a文件小只1行,b文件很大(45m),执行效率很高,耗时4秒,但a文件很大(45m),b文件小如只1行执行效率很低,耗时256秒

5楼这两个bat则a,b大少不影响速度,耗时同为5秒

TOP

拿去玩吧
  1. @gawk "BEGIN{while(getline<\"a.txt\">0){str=$0;while(getline<\"b.txt\">0){print str\"\"$0>\"结果1.txt\"};close(\"b.txt\")}}"
  2. pause
复制代码

TOP

我发现把a与b互换1下名字同样能产生目标文件,

TOP

错误提示:
gawk: cmd. line:l: <FILENAME=b.txt FNR=29937034> fatal: node.c:302:r_dupnode: r->stptr: can't allocate 13 bytes of memory <visual C++ CRT: Not enough memory to complete call to strerror.>

TOP

a文件2.4G都没问题。b文件何以不能大于200m呢?

TOP

发现b文件体积受限于200m以下。a文件1000m都没有问题。结果8G大也没有问题。帮看看何以b体积受限于200m以下

TOP

不希望同时出2个结果,我分成2段能正常工作,帮看看正确否?

@gawk "NR==FNR{a[FNR]=$0;next}{for(b in a){print $0\"\"a[b]>\"结果1.txt\"}}" "b.txt" "a.txt"
pause


@gawk "NR==FNR{a[FNR]=$0;next}{for(b in a){print a[b]\"\"$0>\"结果2.txt\"}}" "b.txt" "a.txt"
pause

TOP

第三方http://www.bathome.net/s/tool/index.html?key=gawk
  1. @gawk "NR==FNR{a[FNR]=$0;next}{for(b in a){print $0\"\"a[b]>\"结果1.txt\";print a[b]\"\"$0>\"结果2.txt\"}}" "b.txt" "a.txt"
  2. pause
复制代码

TOP

回复 2# hepeisheng

自己把“分别与”理解成行行对应了吧

TOP

本帖最后由 hepeisheng 于 2016-8-20 19:17 编辑

原标题是:批处理如何把a文本的每1行插入到b文本的所有行

版主改我标题很无奈。不是行与行的合并。是1变多的。如a有3行。b有6行将产生18行文本。是a承b的效果。3x6=18行

TOP

返回列表