我必须查看一个大文件(典型大小为500MB-2GB)的最后几行。我正在寻找一个相当于Unix命令尾Windows Powershell。一些可供选择的方法是,

http://tailforwin32.sourceforge.net/

and

Get-Content [filename] | Select-Object -Last 10

对于我来说,第一种选择是不允许使用的,而第二种选择是很慢的。有人知道PowerShell的tail的有效实现吗?


当前回答

可以从这个GitHub存储库下载为Windows编译的所有UNIX命令:https://github.com/George-Ogden/UNIX

其他回答

非常基本,但不需要任何附加模块或PS版本要求:

while ($true){清除主机;gc E:\test.txt | select -last 3;睡眠2}

有许多有效的答案,但是,没有一个与linux中的tail具有相同的语法。下面的函数可以存储在$Home\Documents\PowerShell\Microsoft.PowerShell_profile中。Ps1的持久性(请参阅powershell概要文档了解更多详细信息)。

这允许你调用…

tail server.log
tail -n 5 server.log
tail -f server.log
tail -Follow -Lines 5 -Path server.log

这与Linux语法非常接近。

function tail {
<#
    .SYNOPSIS
        Get the last n lines of a text file.
    .PARAMETER Follow
        output appended data as the file grows
    .PARAMETER Lines
        output the last N lines (default: 10)
    .PARAMETER Path
        path to the text file
    .INPUTS
        System.Int
        IO.FileInfo
    .OUTPUTS
        System.String
    .EXAMPLE
        PS> tail c:\server.log
    .EXAMPLE
        PS> tail -f -n 20 c:\server.log
#>
    [CmdletBinding()]
    [OutputType('System.String')]
    Param(
        [Alias("f")]
        [parameter(Mandatory=$false)]
        [switch]$Follow,

        [Alias("n")]
        [parameter(Mandatory=$false)]
        [Int]$Lines = 10,

        [parameter(Mandatory=$true, Position=5)]
        [ValidateNotNullOrEmpty()]
        [IO.FileInfo]$Path
    )
    if ($Follow)
    {
        Get-Content -Path $Path -Tail $Lines -Wait
    }
    else
    {
        Get-Content -Path $Path -Tail $Lines
    }
}

尝试Windows Server 2003资源工具包工具

它包含一个tail.exe,可以在Windows系统上运行。

https://www.microsoft.com/en-us/download/details.aspx?id=17657

可以从这个GitHub存储库下载为Windows编译的所有UNIX命令:https://github.com/George-Ogden/UNIX

从PowerShell 3.0版本开始,Get-Content cmdlet有一个-Tail参数,这应该会有所帮助。关于Get-Content,请参阅technet库的在线帮助。