Board logo

标题: [文本处理] [已解决]求教批处理如何查找比较两个文本文件内容并作内容的替换,十分感谢。 [打印本页]

作者: 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 ),如下脚本能解决需求:
  1. 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
  2. move /y 3.txt 1.txt
复制代码

作者: qixiaobin0715    时间: 2022-10-29 09:32

本帖最后由 qixiaobin0715 于 2022-10-29 09:35 编辑

回复 1# wocool
如果行数不是太多,试试下面代码,bat文件另存为ANSI编码:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1* delims=?" %%i in (2.txt) do set "_%%i=%%i?%%j"
  4. (for /f "tokens=1* delims=|" %%i in (1.txt) do (
  5.     if defined _%%i (
  6.         echo,!_%%i!^|%%j
  7.     ) else (
  8.         echo,%%i^|%%j
  9.     )
  10. ))>new.txt
  11. 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