Windows相当于'tail'命令

时间:2009-08-18 16:38:08

标签: windows command-line

有没有办法在Windows命令行上模拟* nix tail命令?我有一个文件,我想要一种方法来删除第一个 n 行的文本。例如:

D:\>type file.txt
line one
line two
line three
D:\>*[call to tail]* > result.txt

D:\>type result.txt
line two
line three

22 个答案:

答案 0 :(得分:101)

IF 你安装了Windows PowerShell(我认为它包含自XP以来)你可以从cmd.exe运行:

头部指挥:

powershell -command "& {Get-Content *filename* -TotalCount *n*}"

尾巴指挥:

powershell -command "& {Get-Content *filename* | Select-Object -last *n*}"

或直接来自PowerShell:

Get-Content *filename* -TotalCount *n*
Get-Content *filename* | Select-Object -last *n*


更新

PowerShell 3.0(Windows 8及更高版本)添加了Tail命令,别名为Last。 还添加了HeadFirst TotalCount别名。

因此,命令可以重写为

Get-Content *filename* -Head *n*
Get-Content *filename* -Tail *n*

答案 1 :(得分:80)

没有确切的等价物。但是,存在一个本机DOS命令“more”,它有一个+ n选项,将在第n行之后开始输出文件:

DOS提示符:

C:\>more +2 myfile.txt

上面的命令将输出前两行之后的所有内容 这实际上是Unix head 的反转:

Unix控制台:

root@server:~$ head -2 myfile.txt

上面的命令只会打印文件的前两行。

答案 2 :(得分:24)

more /e filename.txt P n

其中n =要显示的行数。工作得很快,就像head命令一样。

答案 3 :(得分:17)

您可以从CoreUtils获取GnuWin32,这是一组标准的unix工具,移植到Windows。

除其他外,它包含头部。

答案 4 :(得分:12)

这是一个彻底的黑客,但如果它是一个巨大的文件,你只想检查格式,标题等,你正在寻找一个解决方案,你总是可以将'more'输出重定向到一个新的文件, CTRL-C很快。输出行无法精确控制,你最有可能在输出行的中间将其删除,但它是一种廉价的方法来获取一小部分无法使用的文件。

实施例

C:\more test.csv > test.txt 
^C C:\more test.txt
line 1
line 2
etc...... C:\

答案 5 :(得分:7)

当使用Matt已经提到的更多+ n时,为了避免长文件中的暂停,试试这个:

more +1 myfile.txt> CON

当您从更多位置重定向输出时,它不会暂停 - 在此处您将重定向到控制台。您可以类似地重定向到其他文件,如果这是您想要的最终结果,则暂停更多。使用>重定向到文件并覆盖它(如果它已经存在),或者>>附加到现有文件。 (可以使用任一方式重定向到con。)

答案 6 :(得分:7)

嗯,这将它,但它的速度和它看起来一样快(大致为O(n * m),其中n是要显示的行数,m是总数文件中的行):

for /l %l in (1,1,10) do @for /f "tokens=1,2* delims=:" %a in ('findstr /n /r "^" filename ^| findstr /r "^%l:"') do @echo %b

其中“10”是您要打印的行数,“filename”是文件的名称。

答案 7 :(得分:5)

Powershell的:

Get-Content C:\logs\result.txt -Tail 10

Get-Content C:\logs\result.txt -wait (monitor the tail)

答案 8 :(得分:5)

使用powershell的

Get-content -Tail n file.txt是唯一接近tail的linux。

上面建议的Get-Content *filename* | Select-Object -last *n*加载/解析整个事情。毋庸置疑,它对我的​​10GB日志文件不满意...... -Tail选项确实从文件末尾开始。

答案 9 :(得分:5)

你也可以使用Git bash来模拟头部和尾部

答案 10 :(得分:2)

如果你想要head命令,一个简单的方法就是安装Cygwin。然后,您将拥有所有可用的UNIX工具。

如果这不是一个好的解决方案,那么你可以尝试使用findstr并搜索行尾指示符。

MSDN上的

findstr:http://technet.microsoft.com/en-us/library/bb490907.aspx

答案 11 :(得分:2)

可从此处下载资源工具包:http://www.microsoft.com/downloads/en/confirmation.aspx?familyId=9d467a69-57ff-4ae7-96ee-b18c4790cffd&displayLang=en

它包含一个tail.exe工具,但它只与某些Windows版本兼容

(从这篇文章复制:Tail command for windows

答案 12 :(得分:1)

FWIW,对于那些只需要从文件头部剪掉不确定数量的记录的人, 更多> 效果很好。这对于在开发某些东西的早期阶段使用较小的文件非常有用。

答案 13 :(得分:1)

这是一个快速的本机头命令,它为您提供DOS中的前9行。

findstr /n "." myfile.txt | findstr "^.:"

每行的前2个字符将是行号。

答案 14 :(得分:1)

我没有尝试过提取范围,但我能够使用以下DOS命令获取一行:

find /N " " *.log|find "[6]" 

由于大多数文件都包含空格,因此该命令从所有LOG文件中提取每一行,并且基本上从每个文件的1开始编号。然后将编号结果传送到第二个FIND命令,该命令查找标记为数字6的行。

答案 15 :(得分:1)

您可以使用this page上的免费head实用程序。我还没有尝试过。

答案 16 :(得分:0)

set /p line= < file.csv 
echo %line%

它将在cmd Windows中以变量%line%。

返回文件的第一行

答案 17 :(得分:0)

作为一个现代的答案,如果运行Windows 10,则可以使用“ Windows的Linux子系统”。

https://docs.microsoft.com/en-us/windows/wsl/install-win10

这将允许您从Windows内部运行本机linux命令,从而以与在linux中完全相同的方式运行tail。

答案 18 :(得分:0)

在PS中尝试使用命令:

Select -Last 1

此命令也可以通过管道传递。

获取第一行的示例:

type .\out.txt | Select -Last 1

或获取第一行:

 type .\out.txt | Select -First 1

答案 19 :(得分:0)

保留第一行文本(头部):

set n=<lines>
for /l %a in (1,1,%n%) do (
for /f "tokens=*" %i in ('find /v /n "" ^< test1.txt ^| find "[%a]"') do (
REM ove prefixed line numbers:
set a=%i
set a=!a:*]=! 
echo:!a!)
)

丢弃第一行文本(尾部):

set n=<lines>
set file=<file.txt>
set /a n=n+1 >nul
for /f "tokens=*" %i in ('find /v /c "" ^< %file%') do set total=%i
for /l %a in (%n%,1,%total%) do (
for /f "tokens=*" %i in ('find /v /n "" ^< %file% ^| find "[%a]"') do (
REM ove prefixed line numbers:
set a=%i
set a=!a:*]=! 
echo:!a!)
)

注意:
head函数也可以通过fsutil
实现 尾部功能也可以通过fc & comp

来实现

在 Win 10 cmd 上测试

答案 20 :(得分:-2)

警告,使用未知文本输入的批处理文件,令牌和delim功能可能会造成灾难,因为对&amp;,!,&lt;等字符进行了特殊解释。此类方法应保留为仅可预测文本。

答案 21 :(得分:-2)

我认为没有开箱即用的方法。在DOS中没有这样的命令,批处理文件远远限于模拟它(没有重大痛苦)。