代码之家  ›  专栏  ›  技术社区  ›  Chris Smith

相当于“tail”命令的Windows

  •  94
  • Chris Smith  · 技术社区  · 15 年前

    有没有办法模拟*nix tail Windows命令行上的命令?我有一个文件,我想找个办法把第一个剪掉 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
    
    20 回复  |  直到 5 年前
        1
  •  78
  •   Matthew Nizol    9 年前

    没有完全等效的。但是,存在一个本地DOS命令“more”,它有一个+n选项,该选项将在第n行之后开始输出文件:

    DOS提示:

    C:\>more +2 myfile.txt
    

    上面的命令将在前2行之后输出所有内容。
    这实际上与Unix相反 :

    Unix控制台:

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

    上面的命令将只打印文件的前2行。

        2
  •  96
  •   Amit Portnoy    6 年前

    如果 你有 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 . Head First 别名到 TotalCount 还添加了。

    因此,命令可以重新编写为

    Get-Content *filename* -Head *n*
    Get-Content *filename* -Tail *n*
    
        3
  •  22
  •   phuclv    6 年前
    more /e filename.txt P n
    

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

        4
  •  17
  •   Sebastian Paaske Tørholm    15 年前

    你可以得到 CoreUtils GnuWin32 这是一组标准的Unix工具,移植到Windows。

    除其他外,它还包含头部。

        5
  •  12
  •   Walfie    11 年前

    这完全是一次黑客攻击,但是如果你想检查一个大文件的格式、头文件等,而你在寻找一个解决方案,你总是可以将“更多”的输出重定向到一个新文件,并快速按ctrl-c。输出行不能被精确控制,您很可能会在输出行的中间杀死它,但这是一种获取一小部分不可用文件的廉价方法。

    前任。

    C:\more test.csv > test.txt 
    ^C C:\more test.txt
    line 1
    line 2
    etc...... C:\
        6
  •  7
  •   Anon    15 年前

    当使用Matt已经提到的more+n时,为了避免在长文件中暂停,请尝试以下操作:

    更多+1 myfile.txt>con

    当您从more重定向输出时,它不会暂停-在这里您重定向到控制台。如果这是您想要的最终结果,您也可以类似地重定向到其他类似的文件,而不需要停顿更多。使用>重定向到文件并覆盖该文件(如果该文件已存在),或者使用>>附加到现有文件。(可用于重定向到con。)

        7
  •  7
  •   brianary    15 年前

    嗯,这会 它,但速度和它看起来一样快(大约是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”是要打印的行数,“file name”是文件名。

        8
  •  5
  •   brigasnuncamais    9 年前

    您也可以使用 Git bash 头部和尾部也是模拟的

        9
  •  5
  •   Sebas    8 年前

    Get-content -Tail n file.txt PowerShell是唯一接近 tail 在Linux中。

    这个 Get-Content *filename* | Select-Object -last *n* 上面建议加载/解析整个内容。不用说,它对我的10GB日志文件不满意…这个 -Tail 选项不会从文件结尾开始。

        10
  •  4
  •   Manuel Alves    7 年前

    Powershell:

    Get-Content C:\logs\result.txt -Tail 10
    
    Get-Content C:\logs\result.txt -wait (monitor the tail)
    
        11
  •  2
  •   Zian Choy    15 年前

    如果您想要head命令,一个简单的方法是安装cygwin。然后您就可以使用所有的Unix工具了。

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

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

        12
  •  2
  •   Sriniv rasputino    7 年前

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

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

    (复制自本帖: Tail command for windows )

        13
  •  1
  •   user382459    13 年前

    fwiw,对于那些只需要从文件头截取不确定数量的记录的人, 更多的; 很好用。这对于在开发东西的早期阶段使用较小的文件很有用。

        14
  •  1
  •   GDP Danny    12 年前

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

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

    由于大多数文件都包含空格,所以这个命令从所有日志文件中提取每一行,并从每个文件的1开始对它们进行编号。然后将编号的结果通过管道传输到第二个 FIND 查找标记为数字6的行的命令。

        15
  •  1
  •   sashkello    11 年前

    这里有一个快速的本地head命令,它为您提供DOS中的前9行。

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

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

        16
  •  1
  •   Gerhard    6 年前

    有免费的 head 实用工具 this page 你可以用的。我还没试过。

        17
  •  0
  •   Sergey Orlov    7 年前
    set /p line= < file.csv 
    echo %line%
    

    它将返回命令窗口中变量%line%中文件的第一行。

        18
  •  0
  •   Alex KeySmith    5 年前

    作为当代的答案,如果运行Windows10,您可以使用“Linux Subsystem for Windows”。

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

    这将允许您在Windows中运行本机Linux命令,从而精确地跟踪您在Linux中的运行方式。

        19
  •  -2
  •   EricSchaefer    15 年前

    我不认为有出路。在DOS中没有这样的命令,批处理文件远远局限于模拟它(没有大的麻烦)。

        20
  •  -2
  •   Batch Warning    14 年前

    警告:在未知文本输入上使用批处理文件for、tokens和delims功能可能会因为对字符(如&、)的特殊解释而导致灾难!,<等。此类方法应只保留用于可预测文本。