【发布时间】:2017-04-11 21:21:31
【问题描述】:
我有一个日志文件 C:\temp\data.log 它包含以下数据:
totalSize = 222,6GB
totalSize = 4,2GB
totalSize = 56,2GB
我的目标是从文件中提取数字并将它们总结起来,包括逗号后的数字。到目前为止,如果我不正则表达式包含在逗号后的值中的数字,并且只使用逗号前面的数字,它就可以工作。我遇到的另一个问题是,如果文件只包含一行,如下例所示,如果它只包含一行,它会将数字 222 拆分为三个文件,其中三个文件中包含数字 2。如果上面的日志文件包含 2 行或更多行,则它可以正常工作并按应有的方式总结,只要我不使用带逗号的值。
totalSize = 222,6GB
以下是正则表达式添加到现有变量 $regex 末尾的一些代码,其中包括:
[,](\d{1,})
我没有包含上面的正则表达式,因为它没有正确总结。
整个脚本如下:
#Create path variable to store contents grabbed from $log_file
$extracted_strings = "C:\temp\amount.txt"
#Create path variable to read from original file
$log_file = "C:\temp\data.log"
#Read data from file $log_file
Get-Content -Path $log_file | Select-String "(totalSize = )" | out-file $extracted_strings
#Create path variable to write only numbers to file $output_numbers
$output_numbers = "C:\temp\amountresult.log"
#Create path variable to write to file jobblog1
$joblog1_file = "C:\temp\joblog1.txt"
#Create path variable to write to file jobblog2
$joblog2_file = "C:\temp\joblog2.txt"
#Create path variable to write to file jobblog3
$joblog3_file = "C:\temp\joblog3.txt"
#Create path variable to write to file jobblog4
$joblog4_file = "C:\temp\joblog4.txt"
#Create path variable to write to file jobblog5
$joblog5_file = "C:\temp\joblog5.txt"
#Create pattern variable to read with select string
$regex = "[= ](\d{1,})"
select-string -Path $extracted_strings -Pattern $regex -AllMatches | % { $_.Matches } | % { $_.Value } > $output_numbers
(Get-Content -Path $output_numbers)[0..0] -replace '\s' > $joblog1_file
(Get-Content -Path $output_numbers)[1..1] -replace '\s' > $joblog2_file
(Get-Content -Path $output_numbers)[2..2] -replace '\s' > $joblog3_file
(Get-Content -Path $output_numbers)[3..3] -replace '\s' > $joblog4_file
(Get-Content -Path $output_numbers)[4..4] -replace '\s' > $joblog5_file
$jobdata0 = (Get-Content -Path $joblog1_file)
$jobdata1 = (Get-Content -Path $joblog2_file)
$jobdata2 = (Get-Content -Path $joblog3_file)
$jobdata3 = (Get-Content -Path $joblog4_file)
$jobdata4 = (Get-Content -Path $joblog5_file)
$result = $jobdata0 + $jobdata1 + $jobdata2 + $jobdata3 + $jobdata4
$result
所以我的问题是:
如果文件 C:\temp\data.log 仅包含一个字符串而不将该单个数字分成多个文件,我如何才能使其工作。如果它包含多个字符串,它也应该可以工作,因为它现在可以处理多个字符串。
如何在计算中包含逗号值?
如果我运行这个脚本,我得到的结果应该是 282,也许它甚至可以缩短脚本?
【问题讨论】:
标签: powershell