如何从文本文件中提取特定行
How to extract specific line from text file
我有一个很大的日志文件 (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
如何从日志文件中提取第 3 行作为;
2019-10-02 00:03:55.410765
通过使用 powershell 脚本?
您可以试试这个并将 $target 变量更改为您要提取的任何行:
$content = Get-Content "path to user.log"
$count = 0
$target = 3
foreach ($line in $content) {
$count += 1
if ($count -eq $target) {
$line
break
}
}
适合处理大输入文件的简单且内存高效方法是结合 Get-Content
与 Select-Object
:
Get-Content user.log | Select-Object -Skip 2 -First 1
-Skip 2
指示 Select-Object
跳过 Get-Content
.
输出的前 2 个输入行
因此,第 3rd 行是第一个被 Select-Object
处理和输出的行,
-First 1
使它 停止 处理,这样就不需要读取文件的其余部分了。
A 更快 方法, IF 到所需行号的文件部分是 足够小 整个内存:
(Get-Content -TotalCount 3 -ReadCount -3 user.log)[-1]
-TotalCount 3
告诉 Get-Content
总共读取 3 行(最多)。
-ReadCount 3
还告诉 Get-Content
一次读取所有 3 行 到数组中并通过管道 作为单个对象 - 而不是逐行 - 这不是必需的,但加速命令。
[-1]
然后从结果数组中提取 last 元素,即第 3 行。
如果输入文件整体较小,下面的方案最简单:
(Get-Content user.log)[2] # add -ReadCount 0 to speed things up
即Get-Content
读取所有行,(...)
在内存中收集到一个数组中,[2]
访问数组的第3个元素,即第3行。
加速此解决方案的一种简单方法是添加 -ReadCount 0
,这使得 Get-Content
发出所有输入行本身的数组,作为 单个输出对象,而不是 一个接一个 发出行,然后让 (...)
将它们收集在一个数组中。
我有一个很大的日志文件 (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
如何从日志文件中提取第 3 行作为;
2019-10-02 00:03:55.410765
通过使用 powershell 脚本?
您可以试试这个并将 $target 变量更改为您要提取的任何行:
$content = Get-Content "path to user.log"
$count = 0
$target = 3
foreach ($line in $content) {
$count += 1
if ($count -eq $target) {
$line
break
}
}
适合处理大输入文件的简单且内存高效方法是结合 Get-Content
与 Select-Object
:
Get-Content user.log | Select-Object -Skip 2 -First 1
-Skip 2
指示Select-Object
跳过Get-Content
. 输出的前 2 个输入行
因此,第 3rd 行是第一个被
Select-Object
处理和输出的行,-First 1
使它 停止 处理,这样就不需要读取文件的其余部分了。
A 更快 方法, IF 到所需行号的文件部分是 足够小 整个内存:
(Get-Content -TotalCount 3 -ReadCount -3 user.log)[-1]
-TotalCount 3
告诉Get-Content
总共读取 3 行(最多)。-ReadCount 3
还告诉Get-Content
一次读取所有 3 行 到数组中并通过管道 作为单个对象 - 而不是逐行 - 这不是必需的,但加速命令。
[-1]
然后从结果数组中提取 last 元素,即第 3 行。
如果输入文件整体较小,下面的方案最简单:
(Get-Content user.log)[2] # add -ReadCount 0 to speed things up
即Get-Content
读取所有行,(...)
在内存中收集到一个数组中,[2]
访问数组的第3个元素,即第3行。
加速此解决方案的一种简单方法是添加 -ReadCount 0
,这使得 Get-Content
发出所有输入行本身的数组,作为 单个输出对象,而不是 一个接一个 发出行,然后让 (...)
将它们收集在一个数组中。