标题: [请教]两个文本内的内容按同行对应的关系拼接?
[打印本页]
作者: Billunique
时间: 2007-10-22 10:07
标题: [请教]两个文本内的内容按同行对应的关系拼接?
现在有一个问题向各位请教:
有一个文件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 ]
作者: junchen2
时间: 2007-10-22 11:41
搞错了
[
Last edited by junchen2 on 2007-10-22 at 11:48 AM ]
作者: Billunique
时间: 2007-10-22 13:55
嗯?搞错什么了?~
作者: abcd
时间: 2007-10-22 14:02
@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
作者: 26933062
时间: 2007-10-22 14:35
@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 ]
作者: lxmxn
时间: 2007-10-22 15:39
标题: 试试Awk的方法
gawk "NR==FNR{a[FNR]=$0};NR!=FNR{print a[FNR],$0>\"3.txt\"}" 1.txt 2.txt
作者: junchen2
时间: 2007-10-22 22:26
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
作者: Billunique
时间: 2007-10-23 10:57
非常感谢大家的帮忙!待小弟有所长进的时候,一定像大家一样,去帮助需要帮助的人。
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:
很感谢兄的热情和两种方法,待我先去学习试验一下

作者: 26933062
时间: 2007-10-23 11:46
不好意识,没测试的.
将最后的
!num!改为
%num%就可以了,
以在5楼改正,并测试通过.
注:文本内容若有空行或分号开头的行,会判断出错.
作者: Billunique
时间: 2007-10-23 15:02
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 ]
作者: bjsh
时间: 2007-10-24 12:27
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
作者: lxmxn
时间: 2007-10-24 20:05
RE bjsh:
不知道,我没有找到Win32版的 pasta ,兄如果有就放上来吧。
作者: vkill
时间: 2007-10-24 20:47
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 ]
作者: vkill
时间: 2007-10-24 20:48
临时下载:
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 ]
作者: lxmxn
时间: 2007-10-24 21:54
RE vkill:
这个问题在windows下面的确是那样,在Linux下面就可以。
问题在于windows/dos和linux下文本结尾的换行符不同而已。windows/dos的是0X0DX0A,而linux下面的文本的回车符是0X0A,所以导致这样的区别。
作者: bjsh
时间: 2007-10-25 09:49
Quote: |
Originally posted by lxmxn at 2007-10-24 09:54 PM:
RE vkill:
这个问题在windows下面的确是那样,在Linux下面就可以。
问题在于windows/dos和linux下文本结尾的换行符不同而已。windows/dos的是0X0DX0A,而linux下面的文本的回车符是0X0A,所以导致这样的区别。 |
|
所以我上面说
在windows下用;
先要把 dos 格式 转换为 unix 格式;
用 tr 就行了;
就是不知道 有没有 windows用的 tr ;
哈哈 vkill 那不知道 还有没有; :P:D
作者: bjsh
时间: 2007-10-25 09:52
Quote: |
Originally posted by vkill at 2007-10-24 08:47 PM:
生成的文件多了个'tab'好象
|
|
paste A B
是把 A文件 和B文件 对应行 用 tab 相连的