Powershell在字符串最后一次出现后从文本文件中获取行
我有一个正在使用的robocopy日志文件,需要使用powershell提取摘要行。我遇到的问题是,摘要的行数并不总是相同的 假设日志文件如下所示:Powershell在字符串最后一次出现后从文本文件中获取行,powershell,robocopy,Powershell,Robocopy,我有一个正在使用的robocopy日志文件,需要使用powershell提取摘要行。我遇到的问题是,摘要的行数并不总是相同的 假设日志文件如下所示: ------------------------------------------------------------------------------- ROBOCOPY :: Robust File Copy for Windows -------------
-------------------------------------------------------------------------------
ROBOCOPY :: Robust File Copy for Windows
-------------------------------------------------------------------------------
Started : Tue Dec 01 06:55:11 2015
Source : C:\Source Path
Dest : E:\Destination Path
Files : *.*
Options : *.* /TEE /S /E /COPY:DAT /PURGE /MIR /NP /R:2 /W:2
------------------------------------------------------------------------------
List of files here
List of files here
List of files here
------------------------------------------------------------------------------
Total Copied Skipped Mismatch FAILED Extras
Dirs : 945 0 945 0 0 0
Files : 10118 4 10114 0 0 3
Bytes : 1.245 g 323.9 k 1.244 g 0 0 0
Times : 0:00:17 0:00:00 0:00:00 0:00:17
Speed : 5264920 Bytes/sec.
Speed : 301.261 MegaBytes/min.
Ended : Tue Dec 01 06:55:28 2015
我可以使用命令$summary=get Content$log | Select Object-last 11 | Out String
静态地获取文件的最后11行,但只有在数据实际移动时才会列出这两条速度线,否则会导致文件列表的最后一行。最终这不是一个大问题,但它看起来不太漂亮
如何从文件中获取定界符最后一行(或第四行,始终有4行)出现之后的最后一行,而不是设置的行数 我想出了一个解决办法,但我觉得必须有更好的办法。第一个命令查找所有分隔符,并将行号输出到
$finds
数组,然后输出第二行,使用$finds
数组中的最后一个元素作为提取摘要的起点
希望这对其他人有帮助
$finds = Get-Content $log | Select-string "--------------" | Select-Object LineNumber
$summary = Get-Content $log | Select-Object -skip $finds[-1]."LineNumber" | Out-String
说明:选择字符串
查找包含“总计”的任何行。参数-Context 0,20
告诉它在匹配行之后最多显示20行(之前显示零行)
如果复制像“sales_total.txt”这样的文件,此行也将匹配。为了避免这种情况,您可以使匹配字符串更显式。例如,使用完整的行。尝试以下操作:
Get-Content $log -Delimiter ('-'*78) |
Select -last 1
我在这里看到的一个缺点是上下文参数将在EOF之后添加空行,使其成为20行。我已经尝试过类似的方法,但视情况而定。我对这个项目的格式有点挑剔。不,它不添加空行。
Get-Content $log -Delimiter ('-'*78) |
Select -last 1