2012-12-07 30 views
-2

UPDATEPowerShell的 - 搜索和输出逐行

我已经得到了一些含参照1000行的日志文件。

Time Reference Date of start Date of end 
12:00 AT001 13 November 2011 15 November 2011 
13:00 AT038 15 December 2012 17 December 2012 
14:00 AT076 17 January 2013 19 January 2013 

$ REF1 = AT038

基本上,我想分析日志文件,并且具有输出端,用于$ ref1用如(逐行):预先

Time : 13h 
Reference : AT038 
Date of start : 15 December 2012 
Date of end : 17 December 2012 

由于

+0

编辑我的答案,以配合新的相关信息 –

+1

这不是一个问题,它是让别人为你做这项工作的要求。 – Mark

回答

1

尝试:

$ref1 = "AT038" 
$csv = Import-Csv .\myfile.txt -Delimiter ' '#Import file as CSV with space as delimiter 
$csv | ? { $_.reference -EQ $ref1 } | FL #Piping each line of CSV to where-object cmdlet, filtering only line where value of column reference is equal to $ref1 variable value. Piping the result of the filtering to file-list to have output as requested in OP. 

代码添加必要在OP变更后:

$ref1 = "AT038" 
$txt = gc .\myfile.txt 
$txt2 = $txt | % { $b = $_ -split ' '; "$($b[0]) $($b[1]) $($b[2])_$($b[3])_$($b[4]) $($b[5])_$($b[6])_$($b[7])" } 
$csv = convertfrom-csv -InputObject $txt2 -Delimiter ' ' 
$csv | ? { $_.reference -EQ $ref1 } | FL 
+0

一些解释会帮助回答这个问题 – dove

+0

@dove添加了一些解释!我希望有点清楚;) –

0

如何:

Get-Content SourceFileName.txt | 
% { ($_ -Replace '(\d{2}):\d{2} (\w{2}\d{3})', 'Time : $1h|Reference : $2').Split('|')} | 
Out-File TargetFileName.txt 
+0

对不起,我忘了告诉你,我的日志里有更多的专栏,我只是更新了我的第一篇文章。谢谢! – expirat001

0

这里是我的修订版本:

$regex = '(\d{2}):\d{2} (\w{2}\d{3}) (\d{2} \b\w+\b \d{4}) (\d{2} \b\w+\b \d{4})' 
$replace = 'Time : $1h|Reference : $2|Date of start : $3|Date of end : $4' 
Get-Content SourceFileName.txt | 
% { ($_ -Replace $regex, $replace).Split('|')} | 
Out-File TargetFileName.txt