中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [请教]两个文本内的内容按同行对应的关系拼接?
« [1] [2] »
作者:
标题: [请教]两个文本内的内容按同行对应的关系拼接? 上一主题 | 下一主题
Billunique
中级用户

菜鸟总动员


积分 259
发帖 112
注册 2006-8-28
状态 离线
『楼 主』:  [请教]两个文本内的内容按同行对应的关系拼接?

现在有一个问题向各位请教:

  有一个文件1.txt,里面的内容为:
1.百度
2.新浪
3.网易
4.雅虎
....
  有一个文件2.txt,里面的内容为:
www.baidu.com
www.sina.com
www.163.com
www.yahoo.com.cn
....
  现在想达到的结果是,在3.txt文件里,内容为:
1.百度 www.baidu.com
2.新浪 www.sina.com
3.网易 www.163.com
4.雅虎 www.yahoo.com.cn
....
  即让两个文件按同行对应的关系进行拼接,如何实现?多谢!

  

[ Last edited by Billunique on 2007-10-22 at 10:19 AM ]



★①②③④⑤⑥⑦⑧⑨⑩㈠㈡㈢㈣㈤㈥㈦㈧㈨㈩ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ【●】→←↑↓▲
2007-10-22 10:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
junchen2
高级用户





积分 537
发帖 219
注册 2007-8-4
来自 杭州--半山
状态 离线
『第 2 楼』:  

搞错了

[ Last edited by junchen2 on 2007-10-22 at 11:48 AM ]

2007-10-22 11:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Billunique
中级用户

菜鸟总动员


积分 259
发帖 112
注册 2006-8-28
状态 离线
『第 3 楼』:  

嗯?搞错什么了?~



★①②③④⑤⑥⑦⑧⑨⑩㈠㈡㈢㈣㈤㈥㈦㈧㈨㈩ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ【●】→←↑↓▲
2007-10-22 13:55
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
abcd
银牌会员





积分 1436
发帖 739
注册 2007-10-11
状态 离线
『第 4 楼』:  


@echo off
for /f "tokens=1* delims=." %%a in (1.txt) do (
   for /f "tokens=1* delims=:" %%i in ('findstr /n .* 2.txt') do (
      if %%i==%%a echo %%a.%%b   %%j>>3.txt
   )
)
pause


2007-10-22 14:02
查看资料  发短消息 网志  OICQ (470237592)  编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 5 楼』:  


@echo off
setlocal EnableDelayedExpansion
set /p var=<2.txt
for /f "delims=" %%a in (1.txt) do (
echo %%a !var!
set /a num+=1
call :lis
)
pause
:lis
for /f "skip=%num% delims=" %%b in (2.txt) do set var=%%b&goto :eof
[ Last edited by 26933062 on 2007-10-23 at 11:44 AM ]



致精致简!
2007-10-22 14:35
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 6 楼』:  试试Awk的方法


gawk "NR==FNR{a[FNR]=$0};NR!=FNR{print a[FNR],$0>\"3.txt\"}" 1.txt 2.txt


2007-10-22 15:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
junchen2
高级用户





积分 537
发帖 219
注册 2007-8-4
来自 杭州--半山
状态 离线
『第 7 楼』:  

echo off
set c=0
setlocal enabledelayedexpansion
for /f "delims=" %%a in (1.txt) do (
set /a c+=1
call :a "%%a" !c!
)
pause
:a
for /f "tokens=1,2 delims=:" %%b in ('findstr /n .* 2.txt') do (
@echo %%b|findstr %2 && echo %~1 %%c>>test.txt
)
goto :eof



2--------------------------------


echo off
set n=0
setlocal enabledelayedexpansion
for /f "delims=" %%a in (1.txt) do (
set /a n+=1
set "a!n!=%%a"
)
set c=0
for /f "delims=" %%b in (2.txt) do (
set /a c+=1
set "b!c!=%%b"
)
for /l %%c in (1 1 !c!) do echo !a%%c! !b%%c!
pause

2007-10-22 22:26
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Billunique
中级用户

菜鸟总动员


积分 259
发帖 112
注册 2006-8-28
状态 离线
『第 8 楼』:  

  非常感谢大家的帮忙!待小弟有所长进的时候,一定像大家一样,去帮助需要帮助的人。

To abcd:
  兄的代码用我举的例子去试验,是可以成功的。但...那只是我为了说明白意图而举的一个例子,呵呵,实际上的文件可能比那复杂,我想做的是超出各种分隔符和内容,将两个文本按同行对应的关系拼接到一起。

To 26933062:
  兄的代码我试了,对于1.txt的内容会遍历一遍,但每行却只能对应出2.txt的首行--若拿上面举的例子说,即类似于这样:
1.百度 www.baidu.com
2.新浪 www.baidu.com
3.网易 www.baidu.com
4.雅虎 www.baidu.com
  同进CMD会报“此时不应有!num! delims="”,我也不知道错误原因在哪,请兄分析一下。

To Lxmxn:
  兄的工具我没有哈,便也无从测试,兄可否提供一下?

To junchen2:
  很感谢兄的热情和两种方法,待我先去学习试验一下



★①②③④⑤⑥⑦⑧⑨⑩㈠㈡㈢㈣㈤㈥㈦㈧㈨㈩ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ【●】→←↑↓▲
2007-10-23 10:57
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 9 楼』:  

不好意识,没测试的.
将最后的!num!改为%num%就可以了,
以在5楼改正,并测试通过.
注:文本内容若有空行或分号开头的行,会判断出错.



致精致简!
2007-10-23 11:46
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Billunique
中级用户

菜鸟总动员


积分 259
发帖 112
注册 2006-8-28
状态 离线
『第 10 楼』:  

To junchen2:

  我想你的第一种思路和abcd是类似的,也同样使其通用性受到影响。
  你的第二种方法测试通过,哈哈~另外想问你的是,set后面加上引号比不加好在哪里?

To 26933062:

  修改后测试通过且效率较高!有一点疑惑,为什么num在这里扩展了反而不行呢,而且CMD的提示是“此时不应有!num! delims="”而不是“"此时不应有!num! delims="”(即引号成双出现)呢?是否跟Call的机制有关呢?

To Lxmxn:

  我在论坛里找到了这个工具(http://www.cn-dos.net/forum/view ... ghlight=&page=1),你的代码真好用,效率真高!

[ Last edited by Billunique on 2007-10-23 at 03:08 PM ]



★①②③④⑤⑥⑦⑧⑨⑩㈠㈡㈢㈣㈤㈥㈦㈧㈨㈩ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ【●】→←↑↓▲
2007-10-23 15:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bjsh
银牌会员





积分 2000
发帖 621
注册 2007-1-1
状态 离线
『第 11 楼』:  



  Quote:
Originally posted by lxmxn at 2007-10-22 03:39 PM:
gawk "NR==FNR{a[FNR]=$0};NR!=FNR{print a[FNR],$0>\"3.txt\"}" 1.txt 2.txt

lxmxn兄 ;

paste 专干这个的吧;

paste 1.txt 2.txt
好了;

对 dos格式的问题 无非 再转化为unix 格式;

哦;对了 似乎没有 windows 下的 paste

2007-10-24 12:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 12 楼』:  

RE bjsh:

不知道,我没有找到Win32版的 pasta ,兄如果有就放上来吧。

2007-10-24 20:05
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 13 楼』:  



  Quote:
Originally posted by bjsh at 2007-10-24 12:27:


lxmxn兄 ;

paste 专干这个的吧;

paste 1.txt 2.txt
好了;

对 dos格式的问题 无非 再转化为unix 格式;

哦;对了 似乎没有 windows 下的 paste

生成的文件多了个'tab'好象

C:\Downloads>type 1.txt
1
2
3
4

C:\Downloads>type 2.txt
5
6
7
8

C:\Downloads>paste 1.txt 2.txt
        5
        6
        7
        8

C:\Downloads>

[ Last edited by vkill on 2007-10-24 at 08:58 PM ]

2007-10-24 20:47
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 14 楼』:  

临时下载:http://www.vkill.net/temp/paste.exe

C:\Downloads>C:\Downloads\paste.exe --h
Usage: C:\Downloads\paste.exe [OPTION]... [FILE]...
Write lines consisting of the sequentially corresponding lines from
each FILE, separated by TABs, to standard output.
With no FILE, or when FILE is -, read standard input.

Mandatory arguments to long options are mandatory for short options too.
  -d, --delimiters=LIST   reuse characters from LIST instead of TABs
  -s, --serial            paste one file at a time instead of in parallel
      --help     display this help and exit
      --version  output version information and exit

Report bugs to <bug-textutils@gnu.org>.

[ Last edited by vkill on 2007-10-24 at 08:50 PM ]

2007-10-24 20:48
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 15 楼』:  

RE vkill:

这个问题在windows下面的确是那样,在Linux下面就可以。

问题在于windows/dos和linux下文本结尾的换行符不同而已。windows/dos的是0X0DX0A,而linux下面的文本的回车符是0X0A,所以导致这样的区别。

2007-10-24 21:54
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: