代码之家  ›  专栏  ›  技术社区  ›  James

将文本文件与Windows命令行连接,删除前导行

  •  122
  • James  · 技术社区  · 15 年前

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

    type file1.txt file2.txt > out.txt
    

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

    我注意到了 more +n 选项指定一个起始行,但我还没有设法组合这些行以获得我想要的结果。我知道这在Windows中是不可能的,我可以手动编辑out.txt来去掉行,但是有没有一种简单的方法可以从命令行中完成?

    11 回复  |  直到 6 年前
        1
  •  133
  •   ghostdog74    15 年前
    more +2 file2.txt > temp
    type temp file1.txt > out.txt
    

    或者你可以使用 copy . 见 copy /? 更多。

    copy /b temp+file1.txt  out.txt
    
        2
  •  61
  •   Raj More    12 年前

    我用这个,它对我很好:

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

    当然,每次跑步前,你必须 DELETE C:\Folder\ConcatenatedFile.csv

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

        3
  •  21
  •   pmr    11 年前

    我没有足够的信誉点来评论推荐使用 *.csv >> ConcatenatedFile.csv ,但我可以添加一个警告:

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

        4
  •  6
  •   Alberto Rossini    15 年前

    使用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变量时的double%。

        5
  •  3
  •   Brian D    11 年前

    我会把这个放在对GhostDog74的评论中,只是我的代表太低了,下面是。

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

    type temp file1.txt > out.txt

    不清楚该代码的结果是什么。是 temp 追加到 file1.txt (根据需要),或 文件1.TXT 追加到 临时雇员 (不需要,因为头行将隐藏在结果文件的中间)。

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

        6
  •  2
  •   Andrew Mao    12 年前

    我知道你说过你不能安装任何软件,但我不确定这个限制有多严格。不管怎么说,我有同样的问题(试图将两个文件连接起来,大概有相同的头),我想我应该为其他到达这个页面的人提供一个备选答案,因为它对我来说非常有用。

    在Windows中尝试了一大堆命令后,我非常沮丧,也尝试了各种各样的图形编辑器,这些编辑器承诺能够打开大文件,但却不能打开,我最终回到了我的Linux根目录,打开了我的cygwin提示符。两个命令:

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

    为了 file1.csv 800 MB和 file2.csv 400兆,这两个命令在我的机器上用了不到5秒的时间。在cygwin提示下,同样如此。我认为Linux命令在cygwin中应该很慢,但是这种方法花费的精力要少得多,而且比我能找到的任何Windows方法都要简单。

        7
  •  2
  •   Waldo    7 年前

    以下是操作方法:

    (type file1.txt && more +1 file2.txt) > out.txt
    
        8
  •  1
  •   Eric Aya    7 年前

    在动力壳牌:

    Get-Content file1.txt | Out-File out.txt
    Get-Content file2.txt | Select-Object -Skip 1 | Out-File -Append out.txt
    
        9
  •  0
  •   Hamed    6 年前

    你也可以试试这个

    type file2.txt >> file1.txt
    

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

    如果您需要原始文件1.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
    
        10
  •  -1
  •   laalto    11 年前
    more +2 file1.txt > type > out.txt && type file2.txt > out.txt
    
        11
  •  -1
  •   Gibolt    7 年前

    这需要 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