标题: [文本处理] [已解决] 批处理如何合并两个文本? [打印本页]
作者: xudaweb 时间: 2011-12-6 09:10 标题: [已解决] 批处理如何合并两个文本?
本帖最后由 xudaweb 于 2011-12-13 08:18 编辑
合并要求:
两个文本的行数一样,需要按相同行进行合并。
A文本内容如下:- 1:c124e04
- 2:c147db4
- 3:c1500a4
- 4:c1500a1
- 5:c147db1
复制代码
B文本内容如下:- 1100-B
- 1307-C
- 1107-B
- 1124-H
- 1126-F
复制代码
需要批处理得到:- 1:c124e04:1100-B
- 2:c147db4:1307-C
- 3:c1500a4:1107-B
- 4:c1500a1:1124-H
- 5:c147db1:1126-F
复制代码
作者: xudaweb 时间: 2011-12-6 09:36
本帖最后由 xudaweb 于 2011-12-6 09:38 编辑
改了下别人的代码,就是有点不太明白具体执行原理,谁能详细解释下?- (for /f "delims=" %%a in ('findstr .* A.txt') do (
- set "a=%%a"
- setlocal enabledelayedexpansion
- set /p b=
- echo !a!:!b!
- endlocal
- ))<B.txt>C.txt
- pause>nul&exit
复制代码
大家还有什么别的思路么?
作者: xudaweb 时间: 2011-12-6 09:45
又发现一种方法,还是不懂具体执行原理。- findstr /n .* B.txt>tmp1
- find /n /v "" <A.txt>tmp2
- (for /f "tokens=2*delims=]:" %%a in ('fc /lb1000 /n tmp1 tmp2^|sort') do (
- if not defined . (
- set /p=%%b<nul
- set .=.
- ) else (
- set .=
- echo;:%%b
- )
- ))>C.txt
- del /q tmp?
- pause
复制代码
作者: rat 时间: 2011-12-6 10:30
2L可以再简化下- @echo off
- (for /f "delims=" %%a in (A.txt) do (
- set /p b=
- call echo %%a:%%b%%
- ))<B.txt>C.txt
- pause>nul
复制代码
作者: bluewing009 时间: 2011-12-6 11:31
是行号对应关系么?就是这边第一行和那边的第一行?
作者: Hello123World 时间: 2011-12-6 12:53
- @echo off&SetLocal EnableDelayedExpansion
- For /f "delims=: tokens=1*" %%i in ('findstr /n ".*" a.txt') do set _%%i=%%j
- (For /f "delims=: tokens=1*" %%i in ('findstr /n ".*" b.txt') do (
- Set n=%%i
- Call echo %%_!n!%%:%%j
- ))>c.txt
- start c.txt
- pause&exit
复制代码
作者: xudaweb 时间: 2011-12-6 13:16
给位都解释解释这几个代码,是怎么执行的。。。
作者: CrLf 时间: 2011-12-6 14:05
回复 7# xudaweb
2 楼代码是分别取来自 for 的输入和来自重定向的输入再同时输出。
http://bbs.bathome.net/thread-13327-1-1.html
3 楼代码是先给两个文本加行号,再 fc 比较(一个永远也不可能相等的逐行比较),以便使两个文本以交错行的形式出现,再合并奇偶行
http://bbs.bathome.net/redirect. ... 4&fromuid=30406
6 楼代码是将 a.txt 的每行各定义为一个变量,以行号为变量名,读取另一个文本时再逐行获取当前行号对应的变量。
出处不明,提供两个相关链接:
http://bbs.bathome.net/thread-1239-1-2.html
http://bbs.bathome.net/viewthread.php?tid=4690
作者: 545810831 时间: 2011-12-6 17:42
- @echo off&setlocal enabledelayedexpansion
- set txt=a.txt&call :sta
- set txt=b.txt&call :sta
- pause
- :sta
- set /a n+=1
- set m=0
- for /f "delims=" %%i in (!txt!) do (
- set /a m+=1
- set "_!n!!m!=%%i"
- if !n! equ 2 call echo %%_1!m!%%:%%_2!m!%%
- )
- goto :eof
复制代码
作者: awk 时间: 2011-12-6 17:52
- paste -d ":" a.txt b.txt >c.txt
复制代码
作者: 920168 时间: 2011-12-13 10:55
- @echo off
- setlocal enabledelayedexpansion
- set n1=0
- for /f "delims=" %%a in (1.txt) do (
- set /a n1=n1+1
- set n2=0
- for /f "delims=" %%b in (2.txt) do (
- set /a n2=n2+1
- if !n1! equ !n2! (
- echo %%a:%%b>>c.txt
- )
- )
- )
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |