本帖最后由 回家路上 于 2015-8-5 20:35 编辑
原帖:http://www.bathome.net/viewthread.php?tid=35952&highlight=
原大概需求概述:
旧文件中中的内容是这样的:
DG00001 10147
DG00002 10148
DG00003 10149
DG00004 10150
DG00005 10151
DG00006 10152
新文件中的内容是这样的:
DG00005
DG00002
DG00003
DG00004
DG00006
DG00001
要把新文件变为
DG00005 10151
DG00002 10148
DG00003 10149
DG00004 10150
DG00006 10152
DG00001 10147
值都是从旧文件中找的,新文件顺序不变,两个文件都5000多行- ::我的两层for循环,需要2分钟,于是去群里寻求好的思路
- @echo off
- (for /f %%a in (NEW_DG.txt) do (
- set e=
- for /f "tokens=1,2 delims= " %%i in ($DG.txt) do (
- if "%%a" equ "%%i" (echo;%%i %%j&set e=1)
- )
- if not defined e echo;%%a
- ))>tmp
- pause & exit /b
复制代码 ::之家群bat-bailong360提供思路,执行需要2秒- @echo off & setlocal enabledelayedexpansion
- for /f "tokens=1,2 delims= " %%i in ($DG.txt) do (
- set #%%i=%%j
- )
- (for /f %%a in (NEW_DG.txt) do (
- if defined #%%a (echo;%%a !#%%a!) else echo;%%a
- ))>tmp
- ::findstr "DG01801" $DG.txt >nul 2>&1 && echo;存在 || echo;不存在
- pause & exit /b
复制代码 bat-尘丶的更简短,可以直接输出,如果不在意空格,最好的了- @echo off&setlocal enabledelayedexpansion
- for /f "tokens=1,2 delims= " %%a in (1.txt) do set #%%a=%%b
- for /f "delims=" %%b in (2.txt) do echo;%%b !#%%b!
- pause & exit /b
复制代码 Batcher出手使用三方gawk,简单有效速度快,2-3秒- gawk "FNR==NR{a[$1]=$2}FNR<NR{print $1,a[$1]}" $DG.txt NEW_DG.txt > 3.txt
复制代码 觉得非常好,贴出来有缘人也看看。O(∩_∩)O哈哈~ |