Powershell:匹配一个文件中的一行文本并添加到另一个文件中

Powershell: Matching a line of text from one file and adding into another file

我有一个非常大的日志文件。它包含多个日期的日志数据。每行都以日期开头(yyyy-dd-mm hh:mm:ss 等)。

因此,日志如下所示:

2016-02-17 10:15:24 some text that follows
2016-02-17 14:21:46 more text that follows
2016-02-19 11:54:11 other text that follows
2016-02-19 16:37:21 more text that follows
2016-02-19 19:52:17 other text that follows
2016-02-22 06:01:32 more text that follows

等...

我正在尝试编写一个 PowerShell 脚本,它将:

  1. 阅读我文件的每一行
  2. 确定日期(前 10 个字符)
  3. 将此行添加到名称为 targetfile-yyyy-mm-dd.log
  4. 的另一个文件中

我对这个问题的第一次尝试是遍历文件中的整个日期范围,并为每个日期从上到下解析整个文件。这需要多次遍历整个文件(40GB!),这需要几天时间。

我理想的解决方案是逐行检查文件一次,然后根据行中的前十个字符将每一行复制到相应的目标文件中。

我该怎么做才能使其最有效?谢谢你的想法!

试试这个:

# Use StreamReader to read line by line the Log $file
$streamReader = New-Object System.IO.StreamReader -Arg "$file"

while($line = $streamReader.ReadLine()){

    # Get the first 10 char to generate the $targetfile
    $tagetfile = "target-file-$($line.Substring(0,10)).log"

    # Add-Content of the $line value, skipping the first 20 char (Date)
    $line.Substring(20) | Add-Content $tagetfile

}