本帖最后由 回家路上 于 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 /bCOPY |
::之家群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 /bCOPY |
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 /bCOPY |
Batcher出手使用三方gawk,简单有效速度快,2-3秒gawk "FNR==NR{a[$1]=$2}FNR<NR{print $1,a[$1]}" $DG.txt NEW_DG.txt > 3.txtCOPY 觉得非常好,贴出来有缘人也看看。O(∩_∩)O哈哈~ |