如何从文本文件中提取特定行

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-ContentSelect-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 发出所有输入行本身的数组,作为 单个输出对象,而不是 一个接一个 发出行,然后让 (...) 将它们收集在一个数组中。