Board logo

标题: [文本处理] 【已解决】批处理如何将两个txt文本行行对应合并成一行 [打印本页]

作者: hmlstfqtl    时间: 2016-7-20 15:47     标题: 【已解决】批处理如何将两个txt文本行行对应合并成一行

本帖最后由 hmlstfqtl 于 2016-7-20 20:28 编辑

我用下面的代码  输出的结果有问题
a.txt 内容
aaaaaaa
bbbbbbbb
cccccccc
ddddddddd
eeeeeeee

b.txt内容
11111111
2222222
333333333
444444444
555555555

我想实现的是轮流输出
aaaaaaa 11111111
bbbbbbbb 2222222
cccccccc 333333333
ddddddddd 444444444
eeeeeeee 555555555



结果却变成
aaaaaaa 11111111
aaaaaaa 2222222
aaaaaaa 333333333
aaaaaaa 444444444
aaaaaaa 555555555
bbbbbbbb 11111111
bbbbbbbb 2222222
bbbbbbbb 333333333
bbbbbbbb 444444444
bbbbbbbb 555555555
cccccccc 11111111
cccccccc 2222222
cccccccc 333333333
cccccccc 444444444
cccccccc 555555555
ddddddddd 11111111
ddddddddd 2222222
ddddddddd 333333333
ddddddddd 444444444
ddddddddd 555555555
eeeeeeee 11111111
eeeeeeee 2222222
eeeeeeee 333333333
eeeeeeee 444444444
eeeeeeee 555555555


代码是这个
  1. @echo off
  2. for /f "delims=" %%i in (a.txt) do for /f "delims=" %%j in (b.txt) do echo %%i %%j>>c.txt
  3. pause
复制代码

作者: GNU    时间: 2016-7-20 15:52

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "delims=" %%i in (a.txt) do (
  4.     set /p str=
  5.     echo !str! %%i
  6. ))<b.txt >c.txt
复制代码

作者: hmlstfqtl    时间: 2016-7-20 16:11

GNU 发表于 2016-7-20 15:52



    如果我想生成其他格式的呢?
ttttttttttt
tttttttttttaaaaaaa
ttttttttttt11111111
tttttttttttaaaaaaa
ttttttttttt

ttttttttttt
tttttttttttbbbbbbbb
ttttttttttt222222
tttttttttttbbbbbbbb
ttttttttttt

ttttttttttt
tttttttttttccccccc
ttttttttttt33333333
tttttttttttccccccccc
ttttttttttt

类似上面这样     tttttt都是固定的   加红的部分是文本内容
作者: pcl_test    时间: 2016-7-20 16:24

回复 1# hmlstfqtl

第三方http://www.bathome.net/s/tool/index.html?down&key=gawk
  1. gawk "NR==FNR{a[NR]=$0;next}{print a[++i],$0}" "1.txt" "2.txt">"3.txt"
复制代码

作者: GNU    时间: 2016-7-20 16:30

回复 3# hmlstfqtl


编写文本处理类型的代码是一件非常严谨的事情,很难根据你瞎编的文本写出适合你的代码。
建议把原始文件和希望得到的文件打包压缩传上来。
作者: hmlstfqtl    时间: 2016-7-20 16:42

本帖最后由 hmlstfqtl 于 2016-7-20 16:44 编辑

回复 5# GNU

文本a.txt
167.229.78.106
167.229.78.107
167.229.78.108
167.229.78.109
167.229.78.110

文本b.txt
t1
t2
t3
t4
t5


生成下面这样的
<VirtualHost 167.229.78.106>
DocumentRoot C:/xampp/htdocs/t1
ServerName 167.229.78.106
</VirtualHost>

<VirtualHost 167.229.78.107>
DocumentRoot C:/xampp/htdocs/t2
ServerName 167.229.78.107
</VirtualHost>
作者: pcl_test    时间: 2016-7-20 17:02

本帖最后由 pcl_test 于 2016-7-21 00:13 编辑

回复 6# hmlstfqtl
  1. //&cls&cscript -nologo -e:jscript "%~f0" "1.txt" "2.txt"&pause&exit
  2. var str = '<VirtualHost {0}>\r\nDocumentRoot C:/xampp/htdocs/{1}\r\nServerName {0}\r\n</VirtualHost>';
  3. var fso =  new ActiveXObject('Scripting.FileSystemObject');
  4. var f1 = fso.OpenTextFile(WSH.Arguments(0), 1);
  5. var f2 = fso.OpenTextFile(WSH.Arguments(1), 1);
  6. var txt = f1.ReadAll().split(/[\r\n]+/), i=0;
  7. while(!f2.AtEndOfStream){
  8.     WSH.echo(str.replace(/\{0\}/g, txt[i]).replace(/\{1\}/, f2.ReadLine())+'\r\n');
  9.     i++;
  10. }
复制代码

作者: hmlstfqtl    时间: 2016-7-20 17:09

怎么输出到文本
作者: pcl_test    时间: 2016-7-20 17:20

回复 8# hmlstfqtl

你猜
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('type "1.txt"') do (
  4.     set /p str=
  5.     echo;^<VirtualHost %%i^>
  6.     echo;DocumentRoot C:/xampp/htdocs/!str!
  7.     echo;ServerName %%i
  8.     echo;^</VirtualHost^>
  9.     echo;
  10. )<"2.txt"
  11. pause
复制代码

作者: hmlstfqtl    时间: 2016-7-20 17:31

回复 9# pcl_test


    你这个不行啊         2.txt的内容只有第一行

<VirtualHost 167.229.78.106>
DocumentRoot C:/xampp/htdocs/t1
ServerName 167.229.78.106
</VirtualHost>

<VirtualHost 167.229.78.107>
DocumentRoot C:/xampp/htdocs/t1
ServerName 167.229.78.107
</VirtualHost>
作者: pcl_test    时间: 2016-7-20 17:36

回复 10# hmlstfqtl

都说让你猜,你说少了什么
作者: hmlstfqtl    时间: 2016-7-20 17:50

@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('type "1.txt"') do (
for /f "delims=" %%j in ('type "2.txt"') do (
    echo;^<VirtualHost %%i^>
    echo;DocumentRoot C:/xampp/htdocs/%%j
    echo;ServerName %%i
    echo;^</VirtualHost^>
    echo;
)
)
pause

这样改了 不行  重复输出很多遍
作者: pcl_test    时间: 2016-7-20 17:58

回复 12# hmlstfqtl

2楼GNU的代码白写了
作者: gawk    时间: 2016-7-20 18:37

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "delims=" %%i in (a.txt) do (
  4.     set /p str=
  5.     echo ^<VirtualHost %%i^>
  6.     echo DocumentRoot C:/xampp/htdocs/!str!
  7.     echo ServerName %%i
  8.     echo ^</VirtualHost^>
  9. ))<b.txt >c.txt
复制代码

作者: hmlstfqtl    时间: 2016-7-20 20:27

gawk 发表于 2016-7-20 18:37



    可以了




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