Windows相当于'tail'命令

Chr*_*ith 103 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
Run Code Online (Sandbox Code Playgroud)

Ami*_*noy 106

如果您安装了Windows PowerShell(我认为它包含在XP之后),您可以从cmd.exe运行:

主管司令部:

powershell -command "& {Get-Content *filename* -TotalCount *n*}"
Run Code Online (Sandbox Code Playgroud)

尾命令:

powershell -command "& {Get-Content *filename* | Select-Object -last *n*}"
Run Code Online (Sandbox Code Playgroud)

或者,直接来自PowerShell:

Get-Content *filename* -TotalCount *n*
Get-Content *filename* | Select-Object -last *n*
Run Code Online (Sandbox Code Playgroud)


更新

PowerShell 3.0(Windows 8和更高版本)添加了Tail带别名的命令Last. HeadFirst别名TotalCount也加入了.

因此,命令可以重写为

Get-Content *filename* -Head *n*
Get-Content *filename* -Tail *n*
Run Code Online (Sandbox Code Playgroud)

  • @AmitPortnoy我在这个堆栈交换的某个地方找到了另一个答案,说"Get-Content"现在有一个tail命令.例如,`Get-content -Tail 5 file.txt`将打印file.txt的最后五行.感谢您更新答案顺便说一下. (2认同)
  • 有什么办法将其用作过滤器?(例如,读取标准输入而不是文件) (2认同)

Mat*_*zol 87

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

DOS提示:

C:\>more +2 myfile.txt
Run Code Online (Sandbox Code Playgroud)

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

Unix控制台:

root@server:~$ head -2 myfile.txt
Run Code Online (Sandbox Code Playgroud)

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

  • 不,这不一样.`tail`从文件末尾开始计数.所以,`tail -2`将打印最后两行. (8认同)
  • 我也可以打印前n个字符吗? (5认同)

小智 24

more /e filename.txt P n
Run Code Online (Sandbox Code Playgroud)

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

  • P,S等命令只能由用户在提示符下输入.它们不能传递给more命令.因此,上面的例子不起作用 (14认同)

Seb*_*olm 17

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

除其他外,它包含头部.


小智 12

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

防爆.

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


Man*_*ves 9

电源外壳:

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

Get-Content C:\logs\result.txt -wait (monitor the tail)
Run Code Online (Sandbox Code Playgroud)

  • 这是正确的答案,最新且相关(与 cmd 不同)。谢谢。 (3认同)

bri*_*ary 8

好吧,这样,但它的速度和它看起来一样快(大致为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
Run Code Online (Sandbox Code Playgroud)

其中"10"是您要打印的行数,"filename"是文件的名称.

  • 对于一个解决方案而言,+1比下载"head"端口需要更长时间才能输入. (6认同)

Ano*_*non 7

当使用Matt已经提到的更多+ n时,为了避免长文件中的暂停,请尝试以下方法:

更多+1 myfile.txt> con

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


小智 5

您也可以使用Git bash,其中头部和尾部也被模拟


Seb*_*bas 5

Get-content -Tail n file.txt使用powershell是唯一接近taillinux的东西.

Get-Content *filename* | Select-Object -last *n*建议上述负载/解析了整个事情.不用说,它对我的​​10GB日志文件不满意......该-Tail选项确实从文件末尾开始.