用Windows命令行连接文本文件,删除前导行
我需要连接一些相对较大的文本文件,并希望通过命令行来完成此操作。 不幸的是我只有Windows,并且不能安装新的软件。
type file1.txt file2.txt > out.txt
允许我几乎得到我想要的,但是我不希望将file2.txt的第一行包含在out.txt中。
我已经注意到, more
有+n
选项来指定一个起跑线,但我没有设法结合这些来得到我想要的结果。 我知道,这可能是不可能在Windows中,我总是可以手动编辑out.txt摆脱线,但有一种简单的方法,从命令行?
more +2 file2.txt > temp type temp file1.txt > out.txt
或者你可以使用copy
。 看copy /?
为更多。
copy /b temp+file1.txt out.txt
我用这个,对我来说效果很好:
TYPE \\Server\Share\Folder\*.csv >> C:\Folder\ConcatenatedFile.csv
当然,在每次运行之前,你必须DELETE C:\Folder\ConcatenatedFile.csv
唯一的问题是,如果所有文件都有标题,那么它将在所有文件中重复。
我没有足够的信誉点评论build议使用*.csv >> ConcatenatedFile.csv
,但我可以添加一个警告:
如果您在用于连接的同一目录中创buildConcatenatedFile.csv
文件,它将被添加到自身中。
使用FOR命令逐行回显一个文件,并用'skip'选项错过一些起始行…
FOR /F "skip=1" %i in (file2.txt) do @echo %i
你可以redirect一个batch file的输出,包含像…
FOR /F %%i in (file1.txt) do @echo %%i FOR /F "skip=1" %%i in (file2.txt) do @echo %%i
注意在batch file中使用FORvariables时的double%。
我会把这个评论给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)是非常长的时间,
我知道你说过你不能安装任何软件,但我不确定这个限制有多严格。 无论如何,我有同样的问题(试图连接两个文件,大概是相同的标题),我想我会为其他人到达这个页面提供一个替代的答案,因为它对我很好。
在Windows中尝试了一大堆命令并且感到非常沮丧之后,还尝试了各种graphics化的编辑器,它们承诺能够打开大文件,但是之后却无法启动,最后我终于回到了我的Linux根目录并打开了我的Cygwin提示。 两个命令:
cp file1.csv out.csv tail -n+2 file2.csv >> out.csv
对于file1.csv
800MB和file2.csv
400MB,这两个命令在我的机器上花了5秒钟。 在Cygwin提示符下,不less于。 我以为Linux命令在Cygwin中应该是很慢的,但是这种方法比我能find的任何窗口方法花费的更less的努力和方法。
以下是如何做到这一点:
(type file1.txt && more +1 file2.txt) > out.txt
more +2 file1.txt > type > out.txt && type file2.txt > out.txt