Boo*_*ada 3 powershell line-numbers text-files
我有一个大日志文件 (user.log) ,例如:
2019-10-02 00:03:55.407095
2019-10-02 00:03:55.410345
2019-10-02 00:03:55.410765
2019-10-02 00:03:55.411187
2019-10-02 00:03:55.411791
2019-10-02 00:03:55.412657
Run Code Online (Sandbox Code Playgroud)
我如何从日志文件中提取第 3 行作为;
2019-10-02 00:03:55.410765
通过使用powershell脚本?
一种适用于处理大型输入文件的简单且节省内存的方法是结合Get-Content使用Select-Object:
Get-Content user.log | Select-Object -Skip 2 -First 1
Run Code Online (Sandbox Code Playgroud)
-Skip 2指示Select-Object跳过由 输出的前 2 行输入行Get-Content。
因此,第 3行是第一个处理并输出的行Select-Object,并-First 1使其在之后立即停止处理,以便不需要读取文件的其余部分。
一种更快的方法,如果文件中达到所需行号的部分足够小以适合整个内存:
(Get-Content -TotalCount 3 -ReadCount -3 user.log)[-1]
Run Code Online (Sandbox Code Playgroud)
-TotalCount 3告诉Get-Content您总共阅读 3 行(最多)。
-ReadCount 3另外告诉一次将Get-Content所有 3 行读入一个数组并将其作为单个对象通过管道发送- 而不是逐行- 这不是必需的,但会加快命令的速度。[-1]然后从结果数组中提取最后一个元素,即第 3 行。
如果输入文件整体较小,以下解决方案最简单:
(Get-Content user.log)[2] # add -ReadCount 0 to speed things up
Run Code Online (Sandbox Code Playgroud)
即Get-Content读取所有行,这些行(...)收集在内存中的数组中,并[2]访问数组的第 3 个元素,即第 3 行。
加快此解决方案的一种简单方法是添加-ReadCount 0,这使得Get-Content将所有输入行的数组本身作为单个输出对象发出,而不是逐行发出行,然后(...)再将它们收集到数组中。
| 归档时间: |
|
| 查看次数: |
4753 次 |
| 最近记录: |