删除文本文件的第一行

19
我需要一个cmd脚本来删除文本文件中的第一行。场景如下:我每天从FTP上取回一个txt文件,问题是它在顶部有一个空白行然后是文件头。由于我自动导入该文件到一个访问表中,那个空白行会给我带来问题。
因此,我需要一个脚本来删除空白行并保存文件。

@Preet,他确实说“cmd”。我猜这意味着Windows操作系统。 - Paul Tomblin
是的,但我将其解读为“命令”的缩写,作为一般术语,而不是特指Windows。 - Preet Sangha
6个回答

30

Windows/命令提示符:

more +1 filename.ext > otherfilename.ext

这看起来运行良好,但是它似乎也将制表符转换为多个空格.. 我需要在导入到postgres之前删除制表符分隔的文件的第一行。由于自动将制表符转换为空格而失败。


+1:很高兴看到微软改进了more命令。我注意到其他命令得到了很大的改进,但错过了这个。 - Renze de Waal
5
你尝试过使用超过15MB的文件吗?这根本不起作用。 - user869097
4
第65535行后会卡住。 - ercan
这个命令将制表符替换为空格!!! 如何在不丢失制表符的情况下进行操作? - sangorys

9

您没有指定平台。以下是如何在任何*NIX环境(以及Windows+Cygwin)中执行此操作:

sed -i~ 1d target-file

与上述相同,它无法处理非常长的行,即24000000个字符或更多。 - user869097

7
为了删除第一行,我会使用 <p> 标签。
tail -n +2 source-file > target-file

如果您想在Windows上实现此功能,请下载GNU工具以获取tail命令。+2表示“从第二行开始”。

如果源文件和目标文件是相同的(这很可能),则会覆盖该文件。 - Adam Rosenfield
你说得对,它们不应该是相同的。然而,它们可以由编写脚本的人选择。 - Renze de Waal

6
在没有额外工具的Windows系统中:
findstr /V /R "^$" filename.whatever

不需要额外的工具

@Preet_Sangha 我无法让它工作。我有什么遗漏的吗? - FistOfFury
发生了什么?输入是什么,输出又是什么? - Preet Sangha
应该补充说明,简单的输出重定向可以将结果输出到文件中: findstr /V /R "^$" filename.whatever>clean_filename.whatever 同时不要使用同一个文件作为输入和输出!这会将文件大小变为0b。 - JDuarteDJ

5
我注意到有些评论询问如何使用Preet Sangha的解决方案。由于我没有足够的声望来添加评论,因此我想在此处发布一个更完整的解决方案。
您可以按照以下方式使用Preet Sangha的解决方案。该脚本将创建一个新的文本文件,删除输入文件的第一行。
findstr /V /R "^$" InputFile.txt > OutputFileNameWithFirstLineRemoved.txt

1
这将删除任何空行(似乎是所需的内容;仅为其他搜索者提供说明)。 - Stephan
Preet Sangha提供的解决方案我认为是最好的,我能够在几秒钟内处理超过3GB的文件!顺便说一句,我将这段代码用于BAT文件以处理多个文件(从最小到最大)FOR /F %%a in ('dir /B /O:S *.sql') do (findstr /V /R "$" %%a > clean_%%a) - JDuarteDJ
@sangorys,这在我测试的每个案例中都有效。您能提供一下您使用的文件编码的详细信息吗? - Nick Painter
  1. 对我来说它没有删除第一行。
  2. 它删除了文件中间很多空白行。
- klm123

3

今天我需要做类似的事情,以下是我的解决方案:

FOR /F "tokens=* skip=1" %A IN ('type "input_file.ext"') DO @echo %A>>"output_file.ext"

more +1 解决方案相比,这种方法的优点在于制表符将被保留。然而,在大文件上,该方法比其他方法慢得多。另外-前导空格将被左对齐修剪,这可能或可能不是一个问题。


你可以使用(for ...... do @echo/%A)>"output.ext"(只需一个重定向)来加快大文件的处理速度。(需要注意的是,这会删除每个空行) - Stephan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接