将多个文本文件合并为一个

时间:2013-01-25 12:26:15

标签: file text batch-file

我在万维网上搜索过高低,似乎无法找到解决我问题的方法!我有多个文本文件,我想要结合。

展示示例比解释我为什么要这样做更容易。

第一个文件如下所示:

John
Paul
Mark
Sam
Herold

此文件用作“主键”。

其余文件包含每个项目的数据。程序每小时将这些数据生成一个新文件。

4
10
20
5
200

我最熟悉windows批处理文件,所以我尝试写这样的东西:

for /f "tokens=*" %%A in (file1.txt) do 
    (for /f "tokens=*" %%B in (file2.txt) do (echo %%A,%%B>>combined.txt))

不幸的是,每个人都会写下每一个价值。如果这将按预期工作,最终结果将如下:

John,4,2,6,9,1,2,5,6,12,51,53,3,6,7,8,1,4,7,2,743,21,4,7,5
Paul,10,5,6,1,7,9,34,56,1,76,48,23,222,12,54,67,23,652,1,6,71,3,6,4

等等。

我使用的软件以此格式显示数据,无法更改。我愿意接受任何建议。

3 个答案:

答案 0 :(得分:10)

您可以通过标准句柄在批处理程序中读取几个输入文件。记住0是Stdin,1是Stdout,2是Stderr,但这留下了3到9个句柄!下面的批处理文件使用两个文件的内容执行文件合并;当然,最多可以将8个文件与此方法结合使用。

@echo off
setlocal EnableDelayedExpansion
Rem First file is read with FOR /F command
Rem Second file is read via standard handle 3
3< file2.txt (for /F "delims=" %%a in (file1.txt) do (
   Rem Read next line from file2.txt
   set /P line2=<&3
   Rem Echo lines of both files
   echo %%a,!line2!
))

此处有更多详情:http://www.dostips.com/forum/viewtopic.php?f=3&t=3126

答案 1 :(得分:1)

unix命令paste也许就是你要找的东西。另请参阅this question on StackOverflow

答案 2 :(得分:1)

你可以这样做:

paste -d, file*.txt > combined.txt

如果您有paste可用。您可能需要安装cygwin,或者在* nix机器上工作。 (您确实说过您对所有建议持开放态度!)这依赖于按顺序命名的数据文件。如果你想调整订单,你可以拼写而不是使用glob。