批量合并单个制表符分隔文件中的2个文本文件

时间:2011-08-11 19:28:27

标签: windows bash batch-file

我坚持这个: 我需要在批处理脚本上将单个制表符分隔文本文件中的两个文本文件合并。 例如:

文件1:

qwer
tyui
asdf

file2的:

1345
6876
8796

file3:

qwer    1345
tyui    6876
asdf    8796

事实上我只需要与Unix命令相同:paste -d "\t" file1 file2 > file3

3 个答案:

答案 0 :(得分:13)

 @echo off

 set f1=1.txt
 set f2=2.txt
 set "sep=  "  % tab %

 (
   for /f "delims=" %%a in (%f1%) do (
      setlocal enabledelayedexpansion
       set /p line=
       echo(%%a!sep!!line!
      endlocal
   )
 )<%f2%

pause
goto :eof

答案 1 :(得分:3)

我知道没有本地Windows命令可以做到这一点,但是有一套适用于Windows here的Unix工具。

答案 2 :(得分:3)

walid2me的答案非常棒,这只是一个很小的例子来展示如何使文件!^中的1.txt等字符安全,文件2.txt的内容是安全,用set/p语法读取它。

@echo off

 set f1=1.txt
 set f2=2.txt
 set "sep=  "  % tab %

 (
   setlocal DisableDelayedExpansion
   for /f "delims=" %%a in (%f1%) do (
      set "f1_line=%%a"
      setlocal EnableDelayedExpansion
       set /p f2_line=
       echo(!f1_line!!sep!!f2_line!
      endlocal
   )
   endlocal
 )<%f2%

pause
goto :eof

如您所见,我只是在%%a

之前移动setlocal EnableDelayedExpansion的扩展

还有另一个小缺陷,因为set/p会删除跟踪控制字符,例如单个CR,LF和TAB。
这仅影响文件2.txt。

关于set /p的深入分析位于New technic: set /p can read multiple lines from a file