我正在寻找两个合并成一个多个csv文件。然而,我需要他们合并,使列并排不继续。我的文件每次有两列,我会有一个csv文件,通过提取每个文件上的第二列并复制到另一个文件中,所以我将有一个x列的文件(第二个)。
例如
File1
A B
1 2
1 2
1 2
File2
A C
1 3
1 3
1 3
Filex
A X
1 x
1 x
1 x
结果
B C X
2 3 x
2 3 x
2 3 x
我发现了这个:Merge csv file side by side using batch file
但它只针对两个文件,并不提取任何内容。
谢谢.
3条答案
按热度按时间b09cbbtk1#
下面的所有解决方案都假设所有输入文件的格式一致,并且具有相同的行数。
在Merge csv file side by side using batch file中使用的技术可以修改为解析和支持2个以上的文件。我还在循环中打开和关闭延迟扩展,以保护可能出现在数据中的任何
!
。如果在启用延迟扩展时扩展包含!
的FOR变量,则这些变量将损坏:上面的代码可以通过FOR循环加上句柄0和3-9扩展到最多支持9个输入文件。如果你有超过8个输入,那么你需要多个循环。第一个循环可以处理前9个文件并将部分结果写入临时文件。连续循环可以从临时文件读取并合并多达8个附加文件。
如果解析规则变得更加复杂,上述操作可能会变得很麻烦。
我的JREPL.BAT hybrid JScript/batch utility可以用来高效地解析和合并任意数量的文件,并且您可以根据需要修改正则表达式来解析几乎任何csv文件格式。
理论上,您可以使用任意数量的管道来支持所有的输入文件,但是如果管道太多,可能会变得低效。您可以使用临时文件来暂存合并以保持效率。
ktecyv1j2#
本文最初描述的方法可以修改,以处理可变数量的文件(最大8个),因此您只需将所需的文件放入参数中:
举例来说:
nzrxty8p3#
我使用名为
q28850167*.txt
的文件来进行测试,其中包含您的数据。生成newfile.txt
清除从
$
开始的所有变量对于匹配掩码的每个文件,通过
findstr/n
处理每行,以将number :
应用于每行的开头。使用:
和Space作为分隔符选择第一列和第三列+,并附加到变量$linenumber
。然后简单地从存储的数据中再现每一行。