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

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

[复制链接]
发表于 2016-8-20 18:25:07 | 显示全部楼层 |阅读模式
本帖最后由 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

评分

参与人数 2PB -2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样
pcl_test -4 发帖前先使用论坛搜索

查看全部评分

 楼主| 发表于 2016-8-20 19:12:43 | 显示全部楼层
本帖最后由 hepeisheng 于 2016-8-20 19:17 编辑

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

版主改我标题很无奈。不是行与行的合并。是1变多的。如a有3行。b有6行将产生18行文本。是a承b的效果。3x6=18行
发表于 2016-8-20 19:37:00 | 显示全部楼层
回复 2# hepeisheng

自己把“分别与”理解成行行对应了吧
发表于 2016-8-20 23:15:08 | 显示全部楼层
第三方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
复制代码
 楼主| 发表于 2016-8-21 09:02:29 | 显示全部楼层
不希望同时出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
 楼主| 发表于 2016-8-21 09:40:43 | 显示全部楼层
发现b文件体积受限于200m以下。a文件1000m都没有问题。结果8G大也没有问题。帮看看何以b体积受限于200m以下
 楼主| 发表于 2016-8-21 10:27:48 | 显示全部楼层
a文件2.4G都没问题。b文件何以不能大于200m呢?
 楼主| 发表于 2016-8-21 10:39:34 | 显示全部楼层
错误提示:
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.>
 楼主| 发表于 2016-8-21 11:04:17 | 显示全部楼层
我发现把a与b互换1下名字同样能产生目标文件,
发表于 2016-8-21 12:13:05 | 显示全部楼层
拿去玩吧
  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
复制代码
 楼主| 发表于 2016-8-21 12:46:45 | 显示全部楼层
本帖最后由 hepeisheng 于 2016-8-23 09:31 编辑

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

5楼这两个bat则a,b大少不影响速度,耗时同为5秒
发表于 2016-8-22 17:13:02 | 显示全部楼层
  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的执行时间分别是多少。
 楼主| 发表于 2016-8-23 00:14:03 | 显示全部楼层
本帖最后由 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每秒

评分

参与人数 2PB +30 技术 +1 收起 理由
Batcher + 30 感谢分享
codegay + 1 1

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 12:49 , Processed in 0.022368 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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