标题: [文本处理] 批处理如何根据a.txt中的内容,对很多csv文件中的内容进行替换 [打印本页]
作者: luke2 时间: 2020-7-15 07:28 标题: 批处理如何根据a.txt中的内容,对很多csv文件中的内容进行替换
有一个a.txt 文件,内容如下,其中的内容如下,和定期需要更新
a.txt
NOID_0_0_8=01979664016F0106
NOID_0_0_7=01979664016F0206
NOID_0_0_6=01979664016F0306
...
很多关系数据,且会定期修改
有很多csv文件
Inspection002_CHIP6_NOID_0_0_6.csv
内容中有“NOID_0_0_6”
Inspection002_CHIP7_NOID_0_0_7.csv
内容中有“NOID_0_0_7”
Inspection002_CHIP8_NOID_0_0_8.csv
内容中有“NOID_0_0_8”
...
需求bat读取a.txt文件,根据等于的关系,替换csv文件中的对应内容
替换后得到的csv文件
Inspection002_CHIP6_NOID_0_0_6.csv
内容中的“NOID_0_0_6”被替换成01979664016F0106
Inspection002_CHIP7_NOID_0_0_7.csv
内容中有“NOID_0_0_7”被替换成01979664016F0206
Inspection002_CHIP8_NOID_0_0_8.csv
内容中有“NOID_0_0_8”被替换成01979664016F0306
作者: went 时间: 2020-7-15 11:13
子文件夹也会一同处理- @echo off
- set "txtFile=a.txt"
- for /f "usebackq tokens=1,2 delims==" %%i in ("%txtFile%") do (
- for /r %%a in ("*_%%i.csv") do (
- echo 处理文件:%%a 替换:%%i --^> %%j
- (
- for /f "usebackq delims=" %%b in ("%%a") do (
- set "line=%%b"
- call set "line=%%line:%%i=%%j%%"
- call echo %%line%%
- )
- )>"%%a_NEW"
- move /y "%%a_NEW" "%%a" >nul
- echo 完成!
- echo ------------------------
- )
- )
- pause&exit
复制代码
作者: luke2 时间: 2020-7-15 17:57
回复 2# went
功能实现了,但就是太慢了,因为csv文件里头有几个亿的数据量,
为了减少数据搜索量,能否定义只搜索csv文件中的第二列(或者指定的列),如下图:
作者: Batcher 时间: 2020-7-15 21:25
回复 3# luke2
每个csv文件都包含几亿行数据吗?单个csv文件大概几GB?
作者: luke2 时间: 2020-7-15 22:35
本帖最后由 luke2 于 2020-7-15 22:40 编辑
回复 4# Batcher
csv文件多,每个csv文件大概45MB,含大概7百万个数据量,一个文件夹有大概40多个G,里头多的有1000个左右的csv文件。
所以请求帮忙,看看看能否实现搜索指定的列内容和进行匹配替换,其他的内容保持不变
作者: Batcher 时间: 2020-7-16 10:20
回复 5# luke2
考虑到数据量非常大,而且需要定期更新,建议考虑导入数据库进行处理。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |