使用Windows命令行连接文本文件,删除前导行


127

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

type file1.txt file2.txt > out.txt

使我几乎可以得到想要的东西,但是我不希望将file2.txt的第一行包含在out.txt中。

我注意到,more可以+n选择指定起始行,但是我没有设法将它们组合起来以获得所需的结果。我知道在Windows中可能无法做到这一点,而且我总是可以手动编辑out.txt来摆脱该行,但是有没有一种简单的方法可以从命令行执行此操作?

Answers:


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

或者您可以使用copy。查看copy /?更多。

copy /b temp+file1.txt  out.txt

4
当然!我本来希望避免使用临时文件。我尝试使用括号,竖线和<将其合并为一个命令,但无法到达任何地方。该copy命令要快得多,但是它将SUB字符放在末尾。有办法避免这种情况吗?
詹姆斯

18
我要补充一点,如果您想串联所有文件,则可以不必copy /b *.txt combined.txt单独列出文件即可进行操作。
富裕的2015年

1
看似将Tab转换成空格,可惜!
安东尼奥

有什么命令可以从合并文件中检索原始文件?
swapnil甘地

3
@ ghostdog74:我认为必须type file1.txt temp > out.txt实际附加第二个文件,而第一个文件不带标题
Marius 2016年

61

我用这个,对我来说很好用:

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

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

唯一的问题是,如果所有文件都具有标题,那么它将在所有文件中重复。


2
当我输入连接文件的文件名时,这意味着它以位置(字母顺序)列在文件的末尾,那么Windows似乎连接了两次!我最终使用文件名1filename.csv来解决此问题。我猜想调入另一个文件夹中也应该起作用...
SebK 2014年

1
如果使用>而不是>>,则不必事先删除文件。>重定向输出并每次创建新文件。>>重定向输出并追加。
艾迪·迪约

1
这如何跳过OP询问的file2中的第一行?
Dan Dascalescu 2015年

1
它不会跳过file2的第一行。我错过了那部分问题。
Raj More

1
有什么命令可以从合并文件中检索原始文件?
swapnil甘地

21

我的信誉点不足,无法对要使用的建议进行评论*.csv >> ConcatenatedFile.csv,但是我可以添加警告:

如果您ConcatenatedFile.csv在用于连接的同一目录中创建文件,它将被添加到自身中。


2
这如何跳过OP询问的file2中的第一行?
Dan Dascalescu 2015年

6

使用FOR命令逐行回显文件,并使用'skip'选项忽略许多起始行...

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变量时,请注意双精度%。


4

这样做的方法如下:

(type file1.txt && more +1 file2.txt) > out.txt

3

我会将其放在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

我知道您说过您无法安装任何软件,但是我不确定该限制有多严格。无论如何,我遇到了同样的问题(试图将两个文件的标题连接在一起),并且我想为到达此页面的其他人提供替代答案,因为它对我来说非常有用。

在Windows中尝试了一堆命令并感到非常沮丧之后,还尝试了各种图形编辑器,这些图形编辑器承诺能够打开大文件,但后来却无法,我终于回到Linux根目录并打开了Cygwin提示。两个命令:

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

对于file1.csv800MB和file2.csv400MB,这两个命令在我的计算机上花费了不到5秒的时间。在Cygwin提示下,同样如此。我以为Linux命令在Cygwin中应该很慢,但是这种方法花费的精力少得多,而且比我能找到的任何Windows方法都容易得多。


1

在Powershell中:

Get-Content file1.txt | Out-File out.txt
Get-Content file2.txt | Select-Object -Skip 1 | Out-File -Append out.txt

0

您也可以尝试一下

type file2.txt >> file1.txt

它将file2.txt的内容附加在file1.txt的末尾

如果需要原始的file1.txt,请事先进行备份。或者你可以这样做

type file1.txt > out.txt
type file2.txt >> out.txt

如果要在第一个文件的末尾使用换行符,可以在追加之前尝试以下命令。

type file1.txt > out.txt
printf "\n" >> out.txt
type file2.txt >> out.txt

0

的帮助copy说明通配符可用于将多个文件连接为一个文件。

例如,要将当前文件夹中所有以“ abc”开头的.txt文件复制到一个名为xyz.txt的文件中:

copy abc*.txt xyz.txt

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

-1

这需要Test.txt带头和追加Test1.txtTest2.txt并将结果Testresult.txt分别从第二个和第三个文件中删除头后再写入文件:

type C:\Test.txt > C:\Testresult.txt && more +1 C:\Test1.txt >> C:\Testresult.txt && more +1 C:\Test2.txt >> C:\Testresult.txt
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.