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

时间:2016-02-22 22:49:47

标签: date powershell matching

我有一个非常大的日志文件。它包含多个日期的日志数据。每行以日期开头(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!),这需要数天。

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

    我如何才能最有效率?谢谢你的想法!

1 个答案:

答案 0 :(得分:1)

试试这个:

# 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

}