3

我搜索了万维网高低,似乎找不到任何解决我问题的方法!我有多个要合并的文本文件。

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

第一个文件如下所示:

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

等等。

我正在使用的软件以这种格式显示数据,并且无法更改。我对任何和所有建议持开放态度。

4

3 回答 3

11

您可以通过标准句柄读取批处理程序中的多个输入文件。请记住,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

于 2013-01-25T13:51:16.983 回答
1

unix 命令粘贴可能是您要查找的内容。另请参阅StackOverflow 上的这个问题

于 2013-01-25T12:32:27.503 回答
1

你可以这样做:

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

如果你paste有空。您可能需要安装 cygwin,或在 *nix 机器上工作。(您确实说过您愿意接受所有建议!)这依赖于按顺序命名的数据文件。如果你想调整顺序,你可以把它拼出来而不是使用 glob。

于 2013-01-25T12:32:53.993 回答