Board logo

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

作者: hepeisheng    时间: 2016-8-20 18:25     标题: [已解决]批处理如何将一个文本的每一行分别与另一个文本每行内容合并成一行

本帖最后由 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
作者: hepeisheng    时间: 2016-8-20 19:12

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

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

版主改我标题很无奈。不是行与行的合并。是1变多的。如a有3行。b有6行将产生18行文本。是a承b的效果。3x6=18行
作者: pcl_test    时间: 2016-8-20 19:37

回复 2# hepeisheng

自己把“分别与”理解成行行对应了吧
作者: pcl_test    时间: 2016-8-20 23:15

第三方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
复制代码

作者: hepeisheng    时间: 2016-8-21 09:02

不希望同时出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
作者: hepeisheng    时间: 2016-8-21 09:40

发现b文件体积受限于200m以下。a文件1000m都没有问题。结果8G大也没有问题。帮看看何以b体积受限于200m以下
作者: hepeisheng    时间: 2016-8-21 10:27

a文件2.4G都没问题。b文件何以不能大于200m呢?
作者: hepeisheng    时间: 2016-8-21 10:39

错误提示:
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.>
作者: hepeisheng    时间: 2016-8-21 11:04

我发现把a与b互换1下名字同样能产生目标文件,
作者: pcl_test    时间: 2016-8-21 12:13

拿去玩吧
  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
复制代码

作者: hepeisheng    时间: 2016-8-21 12:46

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

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

5楼这两个bat则a,b大少不影响速度,耗时同为5秒
作者: Batcher    时间: 2016-8-22 17:13

  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的执行时间分别是多少。
作者: hepeisheng    时间: 2016-8-23 00:14

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




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2