标题: [文本处理] [已解决]求教批处理如何查找比较两个文本文件内容并作内容的替换,十分感谢。 [打印本页]
作者: wocool 时间: 2022-10-29 09:06 标题: [已解决]求教批处理如何查找比较两个文本文件内容并作内容的替换,十分感谢。
小弟有两个文本文件1.txt与2.txt。
1.txt的内容大致如下:
12345.abc|12345|1f7y4mg5|123e4r5d
abcde.abc|78|8u65tg4e|09iu876y
5td43.abc|4533|56789uy5|ooi8uj67
.
.
2.txt的内容大致如下:
12345.abc?n=你好
67890.abc?n=欢迎
abcde.abc?n=谢谢您
5td43.abc?n=对
33eed.abc?n=非常感谢
.
.
1.txt文件每行头部截至.abc会在2.txt某行头部有完全一致的字符。现在希望用1.txt每行头部截至.abc去搜索比较2.txt,在2.txt中找到完全一致的某行头部后,用2.txt的含有这相同头部的这一整行替换掉1.txt的头部截至.abc这一位置的字符串。
达到如下效果:
12345.abc?n=你好|12345|1f7y4mg5|123e4r5d
abcde.abc?n=谢谢您|78|8u65tg4e|09iu876y
5td43.abc?n=对|4533|56789uy5|ooi8uj67
.
.
可以在1.txt中直接替换修改,最好生成一个新的文本文件。
不知道小弟说的是不是啰嗦,有不妥处请大大们海涵,谢谢大大们了。
作者: hfxiang 时间: 2022-10-29 09:30
如果不介意第3方工具gawk( http://bcn.bathome.net/tool/4.1.0/gawk.exe ),如下脚本能解决需求:- gawk -F".abc" "{if(NR==FNR){a[$1]=$2}else{if(a[$1]){print $1 FS a[$1] $2}}}" 2.txt 1.txt>3.txt
- move /y 3.txt 1.txt
复制代码
作者: qixiaobin0715 时间: 2022-10-29 09:32
本帖最后由 qixiaobin0715 于 2022-10-29 09:35 编辑
回复 1# wocool
如果行数不是太多,试试下面代码,bat文件另存为ANSI编码:- @echo off
- setlocal enabledelayedexpansion
- for /f "tokens=1* delims=?" %%i in (2.txt) do set "_%%i=%%i?%%j"
- (for /f "tokens=1* delims=|" %%i in (1.txt) do (
- if defined _%%i (
- echo,!_%%i!^|%%j
- ) else (
- echo,%%i^|%%j
- )
- ))>new.txt
- pause
复制代码
作者: wocool 时间: 2022-10-29 10:19
回复 2# hfxiang
OK,俺去试试,十分感谢!
作者: wocool 时间: 2022-10-29 10:20
回复 3# qixiaobin0715
好的,谢谢,我去试下,十分感谢!
作者: wocool 时间: 2022-10-29 10:44
回复 2# hfxiang
刚刚下载软件并用您给的脚本运行了一下,结果生成的3.txt是空文件。再次请求帮忙看看。
作者: wocool 时间: 2022-10-29 10:47
回复 3# qixiaobin0715
可能是两个文件行数比较多,1.txt大概4,5千行,2.txt10多万行,运行后没有反应。还请您看看,麻烦了。
作者: hfxiang 时间: 2022-10-29 11:02
回复 6# wocool
所有文件应确保其为ANSI编码格式,俺反复测试,一切正常
作者: wocool 时间: 2022-10-29 11:18
回复 8# hfxiang
原谅小白的无知吧,保存编码后成功了,十分感谢大大仗义相助。哈哈
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |