|
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 |
|
|
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 |
|