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

时间:2010-03-19 12:39:26

标签: windows command-line concatenation

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

type file1.txt file2.txt > out.txt

允许我几乎得到我想要的东西,但我不希望第一行的file2.txt包含在out.txt中。

我注意到more+n选项来指定起始行,但我没有设法将这些结合起来以获得我想要的结果。我知道在Windows中可能无法实现这一点,我总是可以手动编辑out.txt来删除该行,但是有一种简单的方法可以从命令行执行此操作吗?

12 个答案:

答案 0 :(得分:134)

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

或者您可以使用copy。有关详情,请参阅copy /?

copy /b temp+file1.txt  out.txt

答案 1 :(得分:61)

我使用它,对我来说效果很好:

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

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

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

答案 2 :(得分:21)

我没有足够的声誉点来评论使用*.csv >> ConcatenatedFile.csv的建议,但我可以添加警告:

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

答案 3 :(得分: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 :(得分:3)

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

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

more +1

目前还不清楚此代码的结果是什么。将type temp file1.txt > out.txt附加到temp(根据需要),或将file1.txt附加到file1.txt(由于标题行将隐藏在生成的文件中间,因此不需要)。

此外,对于大文件(例如300MB),这些操作需要非常长的时间

答案 5 :(得分:2)

我知道你说你无法安装任何软件,但我不确定这种限制是多么严格。无论如何,我遇到了同样的问题(尝试将两个文件连接起来可能是相同的标题)我认为我会为到达此页面的其他人提供一个替代答案,因为它对我来说非常有用。

在Windows中尝试了一大堆命令并且受到严重挫折之后,还尝试了各种图形编辑器,这些编辑器承诺能够打开大文件,但后来却不能,我终于回到了我的Linux根源和打开我的Cygwin提示。两个命令:

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

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

答案 6 :(得分:2)

以下是如何执行此操作:

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

答案 7 :(得分:1)

在powershell中:

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

答案 8 :(得分: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

答案 9 :(得分:0)

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

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

copy abc*.txt xyz.txt

答案 10 :(得分:-1)

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

答案 11 :(得分:-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