Board logo

标题: [文本处理] 批处理如何根据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

子文件夹也会一同处理
  1. @echo off
  2. set "txtFile=a.txt"
  3. for /f "usebackq tokens=1,2 delims==" %%i in ("%txtFile%") do (
  4. for /r %%a in ("*_%%i.csv") do (
  5. echo 处理文件:%%a  替换:%%i --^> %%j
  6. (
  7. for /f "usebackq delims=" %%b in ("%%a") do (
  8. set "line=%%b"
  9. call set "line=%%line:%%i=%%j%%"
  10. call echo %%line%%
  11. )
  12. )>"%%a_NEW"
  13. move /y "%%a_NEW" "%%a" >nul
  14. echo 完成!
  15. echo ------------------------
  16. )
  17. )
  18. 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://bbs.bathome.net/) Powered by Discuz! 7.2