将文本附加到每行的开头

问题描述 投票:0回答:2

我需要修改我发送给远程用户的服务器活动报告。我现在不得不将这些信息附加到每天早上发出的报告中,而不是查找客户的许可证号码。我知道POSH可以做到这一点,但我还没有接受任何正式的培训,而且我只熟悉我为特定任务创建的内容。

我有一个带有2个标头LIC和CLIENT的csv文件。日志文件以5位数字开始每行,该数字对应于LIC列中的值。我需要在它的LIC值之前在列中附加CLIENT的值。有没有人有任何关于从哪里开始构建查询csv文件的函数并为我的报表处理器发送另一个日志文件的想法?在此先感谢您的时间!

csv看起来像:

LIC,CLIENT
12345,Client1
54321,Client2
34251,Client3

该日志目前看起来像:

12345_file.txt,9/11/18,08:15:45
54321_file.txt,9/10/18,11:46:55

我希望日志看起来像:

Client1,12345_file.txt,9/11/18,08:15:45
Client2,54321_file.txt,9/10/18,11:46:55
powershell
2个回答
0
投票

示例脚本:

$licenseFile = "licenses.csv"
$logfile = "logfile.txt"
$newLogfile = "logfile2.txt"

$licenseRows = Import-Csv $licenseFile

Import-Csv $logFile -Header "Filename","Date","Time" | ForEach-Object {
  $row = $_
  @(
    ($licenseRows | Where-Object { $_.LIC -eq ($row.Filename -split "_")[0] }).CLIENT
    $row.Filename
    $row.Date
    $row.Time
  ) -join ","
} | Out-File $newLogfile

当然,更改顶部的3个文件名以满足您的要求。

(此脚本假定每个许可证号只有一个客户端编号,并且日志文件中存在匹配项。)


0
投票

试试这个:

$Clients=import-csv "c:\temp\client.txt"

import-csv "c:\temp\log.txt" -Header FileName, Date1, Time1 | %{

$Client=$Clients | where Lic -eq ($_.FileName -split '_')[0] | select -first 1

   if ($Client -ne $null)
   {
      Add-Member -InputObject $_ -MemberType NoteProperty -Value $Client.CLIENT -Name Client
      $_ 
   }

} | export-csv "c:\temp\result.csv" -NoType
© www.soinside.com 2019 - 2024. All rights reserved.