2010-03-19 94 views
105

我需要连接一些相对较大的文本文件,并希望通过命令行执行此操作。不幸的是我只有Windows,并且无法安装新软件。使用Windows命令行连接文本文件,删除前导行

type file1.txt file2.txt > out.txt 

让我几乎得到我想要的东西,但我不希望被列入out.txt FILE2.TXT一号线。

我注意到more+n选项来指定一个起始行,但我没有设法组合这些来获得我想要的结果。我知道这在Windows中可能是不可能的,我总是可以手动编辑out.txt来摆脱界限,但有没有一种简单的方法可以在命令行中执行?

回答

118
more +2 file2.txt > temp 
type temp file1.txt > out.txt 

或者您可以使用copy。有关更多信息,请参阅copy /?

copy /b temp+file1.txt out.txt 
+1

当然!尽管如此,我宁愿避免使用临时文件。我尝试使用圆括号,管道和<将它合并到一个命令中,但无法获取任何地方。 'copy'命令要快得多,但它最后会放置一个SUB字符。有没有办法避免这种情况? – James 2010-03-19 13:13:04

+10

是的,你把'/ b'。见编辑 – ghostdog74 2010-03-19 13:27:45

+7

我会补充说,如果你想连接所有文件,你可以做'copy/b * .txt combined.txt',而不必单独列出文件。 – Phlucious 2015-06-01 18:13:10

6

使用FOR命令呼应线文件中的行,并与“跳过”选项错过数字开头的行...

FOR /F "skip=1" %i in (file2.txt) do @echo %i 

你可以重定向的输出批处理文件,包含类似...

FOR /F %%i in (file1.txt) do @echo %%i 
FOR /F "skip=1" %%i in (file2.txt) do @echo %%i 

请注意在批处理文件中使用FOR变量时的double%。

2

我知道你说过你不能安装任何软件,但我不确定这个限制有多严格。无论如何,我有同样的问题(试图连接两个文件,大概是相同的标题),我想我会为其他人提供一个替代的答案,因为它对我来说非常有用。

在Windows中尝试了一大堆命令并严重受挫之后,还尝试了各种图形化编辑器,它们都承诺能够打开大型文件,但后来无法执行,我终于回到了我的Linux根目录并打开我的Cygwin提示符。两个命令:

cp file1.csv out.csv 
tail -n+2 file2.csv >> out.csv 

对于file1.csv 800MB和400MB file2.csv,这两个命令了下5秒我的机器上。在Cygwin提示符下,不少于。我认为Cygwin的Linux命令本应该很慢,但是这种方法花费的功夫要少得多,而且比我能找到的任何Windows方法都容易得多。

55

我用这个,它很适合我:

TYPE \\Server\Share\Folder\*.csv >> C:\Folder\ConcatenatedFile.csv

当然,每次运行前,你必须DELETE C:\Folder\ConcatenatedFile.csv

唯一的问题是,如果所有的文件有报头,那么它会在所有文件中重复。

+1

当我为连接文件输入文件名时,这意味着它已被列出在文件的结尾(按字母顺序),然​​后窗口似乎连接两次!我最终使用1filename.csv文件名没有问题。我想concatting到一个不同的文件夹也应该工作... – SebK 2014-08-06 06:54:26

+0

如果您使用>而不是>>,您不必事先删除该文件。 >重定向输出并每次创建新文件。 >>重定向输出并追加。 – 2014-12-05 14:50:16

+0

这是如何跳过OP询问的file2中的第一行? – 2015-08-26 22:03:52

20

我没有足够的信誉分的建议发表评论我要使用*.csv >> ConcatenatedFile.csv,但我可以添加一个警告:如果你创建在同一目录ConcatenatedFile.csv文件,您正在使用级联这将是

添加到自己。

+1

这是如何跳过OP询问的file2中的第一行? – 2015-08-26 22:03:48

2

我会把它放在对ghostdog74的评论中,除非我的代表太低,所以在这里。

more +2 file2.txt > temp
此代码实际上会忽略文件的第1行和第2行。 OP希望保留来自第一个文件的所有行(以维护标题行),然后排除第二个文件中的第一行(可能是同一标题行),因此要仅排除标题行OP,应使用more +1

type temp file1.txt > out.txt

目前还不清楚从这个代码什么样的顺序结果。将temp附加到file1.txt(根据需要),或者将file1.txt附加到temp(不希望的,因为标题行将被掩埋在所得文件的中间)。

此外,这些操作需要很长一段时间与大文件(如300MB)

-2
more +2 file1.txt > type > out.txt && type file2.txt > out.txt 
0

这里是如何做到这一点:

(type file1.txt && more +1 file2.txt) > out.txt 
相关问题