我需要连接一些相对较大的文本文件,并希望通过命令行执行此操作。不幸的是我只有Windows,无法安装新软件。
type file1.txt file2.txt > out.txt
允许我几乎得到我想要的东西,但我不希望第一行的file2.txt包含在out.txt中。
我注意到more
有+n
选项来指定起始行,但我没有设法将这些结合起来以获得我想要的结果。我知道在Windows中可能无法实现这一点,我总是可以手动编辑out.txt来删除该行,但是有一种简单的方法可以从命令行执行此操作吗?
答案 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.txt
和Test2.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