![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-06 06:22 |
共 48,039 主题排行 / 350,124 发帖 / 今日 2 篇 / 48,251 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [请教]两个文本内的内容按同行对应的关系拼接? |
| 可打印版本 1,853 / 16 |
| 第1楼 Billunique | 发表于 2007-10-22 10:07 |
| 中级用户 发帖 112 积分 259 | |
|
[请教]两个文本内的内容按同行对应的关系拼接? 现在有一个问题向各位请教:
有一个文件1.txt,里面的内容为: 有一个文件2.txt,里面的内容为: 现在想达到的结果是,在3.txt文件里,内容为: 即让两个文件按同行对应的关系进行拼接,如何实现?多谢! [ Last edited by Billunique on 2007-10-22 at 10:19 AM ] |
|
| 第2楼 junchen2 | 发表于 2007-10-22 11:41 |
| 高级用户 发帖 219 积分 537 来自 杭州--半山 | |
|
搞错了
[ Last edited by junchen2 on 2007-10-22 at 11:48 AM ] |
|
| 第3楼 Billunique | 发表于 2007-10-22 13:55 |
| 中级用户 发帖 112 积分 259 | |
|
嗯?搞错什么了?~
|
|
| 第4楼 abcd | 发表于 2007-10-22 14:02 |
| 银牌会员 发帖 739 积分 1,436 | |
| 第5楼 26933062 | 发表于 2007-10-22 14:35 |
| 银牌会员 发帖 879 积分 2,268 | |
|
[ Last edited by 26933062 on 2007-10-23 at 11:44 AM ] |
|
| 第6楼 lxmxn | 发表于 2007-10-22 15:39 |
| 版主 发帖 4,938 积分 11,386 | |
|
试试Awk的方法 |
|
| 第7楼 junchen2 | 发表于 2007-10-22 22:26 |
| 高级用户 发帖 219 积分 537 来自 杭州--半山 | |
|
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 |
|
| 第8楼 Billunique | 发表于 2007-10-23 10:57 |
| 中级用户 发帖 112 积分 259 | |
|
非常感谢大家的帮忙!待小弟有所长进的时候,一定像大家一样,去帮助需要帮助的人。
To abcd: 兄的代码用我举的例子去试验,是可以成功的。但...那只是我为了说明白意图而举的一个例子,呵呵,实际上的文件可能比那复杂,我想做的是超出各种分隔符和内容,将两个文本按同行对应的关系拼接到一起。 To 26933062: 兄的代码我试了,对于1.txt的内容会遍历一遍,但每行却只能对应出2.txt的首行--若拿上面举的例子说,即类似于这样: 同进CMD会报“此时不应有!num! delims="”,我也不知道错误原因在哪,请兄分析一下。 To Lxmxn: 兄的工具我没有哈,便也无从测试,兄可否提供一下? To junchen2: 很感谢兄的热情和两种方法,待我先去学习试验一下 ![]() |
|
| 第9楼 26933062 | 发表于 2007-10-23 11:46 |
| 银牌会员 发帖 879 积分 2,268 | |
|
不好意识,没测试的.
将最后的!num!改为%num%就可以了, 以在5楼改正,并测试通过. 注:文本内容若有空行或分号开头的行,会判断出错. |
|
| 第10楼 Billunique | 发表于 2007-10-23 15:02 |
| 中级用户 发帖 112 积分 259 | |
|
To junchen2:
我想你的第一种思路和abcd是类似的,也同样使其通用性受到影响。 你的第二种方法测试通过,哈哈~另外想问你的是,set后面加上引号比不加好在哪里? To 26933062: 修改后测试通过且效率较高!有一点疑惑,为什么num在这里扩展了反而不行呢,而且CMD的提示是“此时不应有!num! delims="”而不是“"此时不应有!num! delims="”(即引号成双出现)呢?是否跟Call的机制有关呢? To Lxmxn: 我在论坛里找到了这个工具(http://www.cn-dos.net/forum/viewthread.php?tid=25914&fpage=1&highlight=&page=1),你的代码真好用,效率真高! [ Last edited by Billunique on 2007-10-23 at 03:08 PM ] |
|
| 第11楼 bjsh | 发表于 2007-10-24 12:27 |
| 银牌会员 发帖 621 积分 2,000 | |
Originally posted by lxmxn at 2007-10-22 03:39 PM: lxmxn兄 ; paste 专干这个的吧; paste 1.txt 2.txt 好了; 对 dos格式的问题 无非 再转化为unix 格式; 哦;对了 似乎没有 windows 下的 paste |
|
| 第12楼 lxmxn | 发表于 2007-10-24 20:05 |
| 版主 发帖 4,938 积分 11,386 | |
|
RE bjsh:
不知道,我没有找到Win32版的 pasta ,兄如果有就放上来吧。 |
|
| 第13楼 vkill | 发表于 2007-10-24 20:47 |
| 金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽 | |
Originally posted by bjsh at 2007-10-24 12:27: 生成的文件多了个'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 ] |
|
| 第14楼 vkill | 发表于 2007-10-24 20:48 |
| 金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽 | |
|
临时下载:http://www.vkill.net/temp/paste.exe
C:\Downloads>C:\Downloads\paste.exe --h Usage: C:\Downloads\paste.exe ... ... 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 ] |
|
| 第15楼 lxmxn | 发表于 2007-10-24 21:54 |
| 版主 发帖 4,938 积分 11,386 | |
|
RE vkill:
这个问题在windows下面的确是那样,在Linux下面就可以。 问题在于windows/dos和linux下文本结尾的换行符不同而已。windows/dos的是0X0DX0A,而linux下面的文本的回车符是0X0A,所以导致这样的区别。 |
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |