gpt4 book ai didi

csv - 用于将三个 csv 文件列合并为一列的 Windows 脚本

转载 作者:行者123 更新时间:2023-12-02 07:59:00 24 4
gpt4 key购买 nike

我可以在 Excel 中执行此操作,例如使用 =CONCATENATE 函数将多列合并为一列。但我想做的是将同一文件夹内 3 个不同 csv 文件中的列合并为一列。我想通过批处理脚本运行它,因此像 VBScript、CMD 复制命令之类的东西似乎不起作用。

这是文件结构:

文件1.csv

  • 第 1 列:www.domain.com/
  • 第 2 栏:www.nwdomain.com/
  • 第 3 栏:www.stackdomain.com/
  • 第 4 栏:www.example-domain.com/

文件2.csv

  • 第一栏:关于
  • 第 2 栏:联系方式
  • 第 3 列:索引
  • 第 4 栏:常见问题解答

文件3.csv

  • 第 1 列:.html
  • 第 2 列:.html
  • 第 3 列:.html
  • 第 4 列:.html

输出文件结果:

  • 第 1 列:www.domain.com/about.html

  • 第 2 栏:www.nwdomain.com/contact.html

  • 第 3 栏:www.stackdomain.com/index.html

  • 第 4 栏:www.example-domain.com/faq.html

感谢您的帮助。

最佳答案

@ECHO OFF
SETLOCAL
::
(
FOR /f "tokens=1*delims=:" %%a IN ('findstr /n /r "." ^<csv1.csv') DO (
FOR /f "tokens=1*delims=:" %%c IN ('findstr /n /r "." ^<csv2.csv') DO (
IF %%a==%%c FOR /f "tokens=1*delims=:" %%e IN ('findstr /n /r "." ^<csv3.csv') DO (
IF %%a==%%e (
FOR /f "tokens=1-4delims=," %%m IN ("%%b") DO (
FOR /f "tokens=1-4delims=," %%r IN ("%%d") DO (
FOR /f "tokens=1-4delims=," %%w IN ("%%f") DO (
ECHO.%%m%%r%%w,%%n%%s%%x,%%o%%t%%y,%%p%%u%%z
)
)
)
)
)
)
)
)>new.csv

应该可以。

它的作用是,

  1. 对于 file1,FINDSTR “输出”包含任何字符 (/r ".") 的任何行,前面带有行号和冒号 (/n)。此“输出”由 FOR/f 读取并解析为 2 个标记,由冒号分隔(tokens=1* 表示“第一个标记;其余所有标记”的行'),效果是将行号放入 %%a 中,并将该行的其余部分(即原始 .csv 中的行)放入 %%b
  2. 对于 csv1 的每一行csv2 重复此操作,这次将行号放在 %%c 中,将行放在 % 中%d
  3. 仅当行号匹配时,才对 csv3 重复操作,其中数字位于 %%e 中,文本位于 %%f
  4. 如果最后一个文件中的行号匹配,则解析 %%b%%d%%f 中的每个行文本code> - 这次选择四列,以逗号分隔。此数据出现在 %%m..%%p%%r..%%u%%w..%%z 然后我们要做的就是对接适当的部分并插入逗号。

完成!

<小时/>源和测试结果,包括运行时间(5 行)

start:21:45:40.87
end :21:45:41.09

csv1.csv =========
www.domain.com/,www.nwdomain.com/,www.stackdomain.com/,www.example-domain.com/
www.domain.com/,www.nwdomain.com/,www.stackdomain.com/,www.example-domain.com/
www.domain.com/,www.nwdomain.com/,www.stackdomain.com/,www.example-domain.com/
www.domain.com/,www.nwdomain.com/,www.stackdomain.com/,www.example-domain.com/
www.domain.com/,www.nwdomain.com/,www.stackdomain.com/,www.example-domain.com/
csv2.csv =========
about,contact,index,faq
about,contact,index,faq
about,contact,index,faq
about,contact,index,faq
about,contact,index,faq
csv3.csv =========
.html,.html,.html,.html
.html,.html,.html,.html
.html,.html,.html,.html
.html,.html,.html,.html
.html,.html,.html,.html
new.csv =========
www.domain.com/about.html,www.nwdomain.com/contact.html,www.stackdomain.com/index.html,www.example-domain.com/faq.html
www.domain.com/about.html,www.nwdomain.com/contact.html,www.stackdomain.com/index.html,www.example-domain.com/faq.html
www.domain.com/about.html,www.nwdomain.com/contact.html,www.stackdomain.com/index.html,www.example-domain.com/faq.html
www.domain.com/about.html,www.nwdomain.com/contact.html,www.stackdomain.com/index.html,www.example-domain.com/faq.html
www.domain.com/about.html,www.nwdomain.com/contact.html,www.stackdomain.com/index.html,www.example-domain.com/faq.html
=============

关于csv - 用于将三个 csv 文件列合并为一列的 Windows 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15585696/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com