我需要连接一些相对较大的文本文件,并且希望通过命令行来完成。不幸的是,我只有 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
唯一的问题是,如果所有文件都有标题,那么它将在所有文件中重复。
我没有足够的声望点来评论使用 *.csv >> ConcatenatedFile.csv
的建议,但我可以添加一个警告:
如果您在用于连接的同一目录中创建 ConcatenatedFile.csv
文件,它将被添加到自身。
使用 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 变量时的双 %。
以下是如何执行此操作:
(type file1.txt && more +1 file2.txt) > out.txt
我会把它放在对 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),这些操作需要很长时间
在 powershell 中:
Get-Content file1.txt | Out-File out.txt
Get-Content file2.txt | Select-Object -Skip 1 | Out-File -Append out.txt
我知道你说你不能安装任何软件,但我不确定这个限制有多严格。无论如何,我遇到了同样的问题(试图连接两个可能具有相同标题的文件),我想我会为到达此页面的其他人提供替代答案,因为它对我来说非常有用。
在 Windows 中尝试了一大堆命令并感到非常沮丧之后,还尝试了各种承诺能够打开大文件但后来无法打开的图形编辑器,我终于回到了我的 Linux 根并打开了我的 Cygwin迅速的。两个命令:
cp file1.csv out.csv
tail -n+2 file2.csv >> out.csv
对于 file1.csv
800MB 和 file2.csv
400MB,这两个命令在我的机器上花费了不到 5 秒的时间。在 Cygwin 提示符下,同样如此。我认为 Linux 命令在 Cygwin 中应该很慢,但这种方法比我能找到的任何 Windows 方法都省力得多,而且要容易得多。
你也可以简单地试试这个
type file2.txt >> file1.txt
它将在 file1.txt 的末尾附加 file2.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
copy
的帮助说明通配符可用于将多个文件连接为一个。
例如,要将当前文件夹中以“abc”开头的所有 .txt 文件复制到一个名为 xyz.txt 的文件中:
copy abc*.txt xyz.txt
more +2 file1.txt > type > out.txt && type file2.txt > out.txt
这需要带有标题的 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
不定期副业成功案例分享
copy
命令要快得多,但它会在末尾添加一个 SUB 字符。有没有办法避免这种情况?copy /b *.txt combined.txt
而无需单独列出文件。type file1.txt temp > out.txt
才能实际附加第二个文件,而第一个文件没有标题