如何在Powershell中做头,尾,多,少,多做?

Yue*_*ang 96 windows powershell

我需要这些命令来检查Windows上的日志文件,但我没有安装任何程序,我喜欢Powershell与Windows.

Joe*_*oey 148

Get-Content(别名:) gc是阅读文本文件的常用选项.然后,您可以进一步过滤:

gc log.txt | select -first 10 # head
gc -TotalCount 10 log.txt     # also head
gc log.txt | select -last 10  # tail
gc -Tail 10 log.txt           # also tail (since PSv3), also much faster than above option
gc log.txt | more             # or less if you have it installed
gc log.txt | %{ $_ -replace '\d+', '($0)' }         # sed
Run Code Online (Sandbox Code Playgroud)

这适用于小文件,较大的文件(超过几个MiB)可能有点慢.

PowerShell的社区扩展包括专门的文件的东西某些cmdlet(如GET-FileTail).

  • @mlissner:如果您使用的是PowerShell v3,则可以使用"Get-Content -Tail 2".那肯定更快. (8认同)
  • @ Neil,`-Last`因为同样的原因`awk`会很慢而速度很慢:它必须首先完全消耗流.这就是"Get-Content -Tail"存在的原因.并且没有"head",因为它不符合命名约定,其目的已经由"Select-Item"提供. (3认同)
  • 天哪,这使我的CPU用尽了一个1GB CSV的“ -last 2”。热饮:☕ (2认同)
  • @neil @joey他们有`-head`的别名。见我的回答http://stackoverflow.com/a/41626586/1081043 (2认同)

wis*_*cky 43

以下是内置的方法head和方法tail.不要使用管道,因为如果你有一个大文件,它将非常慢.即使对于大型文件,使用这些内置选项也会非常快.

gc log.txt -head 10 
gc log.txt -tail 10
gc log.txt -tail 10 -wait # equivalent to tail -f
Run Code Online (Sandbox Code Playgroud)

  • @NH我的回答与乔伊的评论一致.他的评论说:"最后很慢......这就是Get-Content -Tail存在的原因." `| select -last`使用管道.我正在使用没有管道的`-tail`.但如果你找到两个相互矛盾的答案,你可能会相信声誉更高的人.此外,您可以在大文件上尝试两种方法.在大文件上会非常明显. (2认同)

Ric*_*ard 8

more.exe在Windows上存在,less很容易找到端口(和PowerShell社区扩展,PSCX,包括一个).

PowerShell实际上并没有提供任何替代单独的程序,但对于结构化数据Out-Grid可能会有所帮助.

Head并且Tail可以分别Select-Object使用-First-Last参数进行模拟.

Sed功能全部可用但结构相当不同.过滤选项可用于Where-Object(或通过Foreach-Object和某些状态的范围).其他,转换,操作可以用Select-Object和完成Foreach-Object.

但是,随着PowerShell传递(.NET)对象 - 具有所有类型的结构,例如.日期仍然是DateTime实例 - 而不仅仅是字符串,每个命令需要解析自己,许多sed和其他此类程序是多余的.